Qt QCursor::setPos() ничего не делает

Я создал минимальный класс, чтобы продемонстрировать свою проблему. Я пытаюсь установить положение курсора, но это не дает никакого эффекта. В моем примере класса я пытаюсь центрировать курсор на виджете. Вот мой класс:

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() возвращает центр виджета, даже если курсор находится не в центре.

Любые советы будут высоко оценены.

Спасибо за ваше время...

1 ответ

Решение

@Leiaz Вы правы, я работаю на виртуальной машине. При запуске программы на моей хост-системе (которая также является Ubuntu) она работает как положено. Спасибо за помощь.

Теперь он работает даже в моей виртуальной машине, после того как я отключил интеграцию с мышью.

Спасибо всем.

Другие вопросы по тегам