我正在使用QQuickFrameBufferObject
在QML应用程序中渲染3D对象。在应用程序中,当我旋转或平移显示的对象时,我希望鼠标光标在QQuickFrameBufferObject
表面上弯曲。
旋转和平移效果很好,但是我找不到控制鼠标位置的方法。
编辑以更好地解释“变形”的含义:“变形”的意思是鼠标光标是在屏幕上旋转3D对象时,单击并拖动鼠标。但是,当您到达右侧屏幕的末端时,您将无法再向右拖动,而必须释放鼠标按钮,将鼠标向左移动,再次单击并拖动以继续旋转。
我想做的是 teleport (或 warp ),当我拖动鼠标并到达右手时,鼠标光标移至渲染表面的左侧渲染表面的一侧,当我旋转时允许无限移动
有没有办法让我达到这种效果(可以简单地通过在鼠标到达边界时从JS脚本或C ++后端设置位置,或者通过一种方法来抓取鼠标并检索相对位置,就像在某些窗口库中所做的一样。
答案 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
),以及如何触发它,但是我猜最清楚。