我创建了一个最小的类来演示我的问题。我正在尝试设置光标位置,但是没有显示任何效果。在示例类中,我尝试将光标居中到小部件。
这是我的课:

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());
}

在按下鼠标按钮的同时移动鼠标光标时,我得到以下输出(示例):



这意味着在我调用QCursor::setPos(center)之前,光标位于小部件右上角的754; 48位置。使用QCursor::setPosition(center)设置光标位置后,光标应位于小部件的中心,而不是小部件的中心,光标停留在右上角。更令人困惑的是,即使光标不在中心,QCursor::pos()也会返回小部件的中心。

任何提示将不胜感激。

感谢您的时间...

最佳答案

@Leiaz是的,我一直在虚拟机中工作。
在我的主机系统(也是ubuntu)上运行程序时,它可以按预期运行。
谢谢您的帮助。

在禁用鼠标集成之后,它现在甚至可以在我的VM中运行。

谢谢大家

关于c++ - Qt QCursor::setPos()什么都不做,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26885507/

10-08 22:29