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

时间:2018-07-12 13:26:52

标签: c++ qt qml qtquick2

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

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

编辑以更好地解释“变形”的含义:“变形”的意思是鼠标光标是在屏幕上旋转3D对象时,单击并拖动鼠标。但是,当您到达右侧屏幕的末端时,您将无法再向右拖动,而必须释放鼠标按钮,将鼠标向左移动,再次单击并拖动以继续旋转。

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

有没有办法让我达到这种效果(可以简单地通过在鼠标到达边界时从JS脚本或C ++后端设置位置,或者通过一种方法来抓取鼠标并检索相对位置,就像在某些窗口库中所做的一样。

1 个答案:

答案 0 :(得分:2)

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

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

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

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