如何在QML中设置鼠标光标位置

How to set mouse cursor position in QML

我正在使用 QQuickFrameBufferObject 在 QML 应用程序中渲染 3D 对象。在应用程序中,当我旋转或平移显示的对象时,我希望鼠标光标在 QQuickFrameBufferObject 表面上 warp

旋转和平移效果很好,但我找不到控制鼠标位置的方法。

编辑是为了更好地解释我所说的翘曲:我所说的 翘曲 鼠标光标是指当你旋转时屏幕上的 3D 对象,单击并拖动鼠标。但是当你到达右侧屏幕的尽头时,你不能再向右拖动,你必须释放鼠标按钮,将鼠标向左移动,再次单击并拖动才能继续旋转。

我想要做的是 teleport(或 warp)鼠标光标到渲染表面的左侧,当我拖动并到达渲染表面的右侧,允许在旋转时无限移动

我有什么方法可以实现这种效果(可以简单地通过在鼠标到达边界时从 JS 脚本或 C++ 后端设置位置,或者通过 grab 鼠标并检索相对位置,这在某些 window 库中可以完成。

我不太了解您的需求,但也许 QCursor-class 可以帮助您。

您可以集成它,例如像这样:

#include <QObject>
#include <QCursor>

class MyObj : public QObject
{
    Q_OBJECT
public:
    explicit MyObj(QObject *parent = 0) : QObject(parent)
    {

    }

signals:

public slots:
    void moveCursor() { cursor.setPos(0, 0); } // Sets it to the top left corner of the screen

private:
    QCursor cursor;
};

将其注册到 QML 并在那里使用它:

ApplicationWindow {
    id: rootWin
    width: 800; height: 600; visible: true

    MyObj {
        id: mob

    }

    Button {
        anchors.centerIn: parent
        onClicked: mob.moveCursor()
    }
}

据我了解,缺少的是如何计算要将鼠标移动到的位置(它们是屏幕而不是 windows 坐标,因此 mapToGlobal)以及如何触发它,但我猜你最了解它。