Я создал минимальный класс, чтобы продемонстрировать свою проблему. Я пытаюсь установить положение курсора, но это не дает никакого эффекта. В моем примере класса я пытаюсь центрировать курсор на виджете.
Вот мой класс:
class testWidget : public QWidget
{
Q_OBJECT
public:
testWidget();
protected:
virtual void mouseMoveEvent(QMouseEvent* event);
};
И вот реализация:
testWidget::testWidget()
{
setMinimumSize(800,600);
show();
}
void testWidget::mouseMoveEvent(QMouseEvent *event)
{
QPoint before(mapFromGlobal(QCursor::pos()));
QPoint center = mapToGlobal(QPoint(width()/2,height()/2));
QCursor::setPos(center);
qDebug()<<"Before:"<<before<<"After:"<<mapFromGlobal(QCursor::pos());
}
При перемещении курсора мыши при нажатии кнопки мыши я получаю следующий вывод (например):
До: QPoint (754,48) После: QPoint (400,300)
Это означает, что до того, как я вызвал QCursor :: setPos (center), курсор находился в позиции 754; 48, которая находится в верхнем правом углу виджета. После того, как я установил позицию курсора с помощью QCursor :: setPosition (center), курсор должен быть в центре виджета, а это не так, курсор остается в верхнем правом углу. И к моему дальнейшему замешательству, QCursor :: pos () возвращает центр виджета, даже если курсор находится не в центре.
Любые советы будут высоко оценены.
Спасибо за ваше время…
@ Leiaz Вы правы, я работаю на виртуальной машине.
При запуске программы на моей хост-системе (которая также является Ubuntu) она работает как положено.
Спасибо за помощь.
Теперь он работает даже в моей виртуальной машине, после того как я отключил интеграцию с мышью.
Спасибо всем.