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

Posted

技术标签:

【中文标题】如何在 QML 中设置鼠标光标位置【英文标题】:How to set mouse cursor position in QML 【发布时间】:2018-07-12 13:26:51 【问题描述】:

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

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

为了更好地解释我所说的变形:我所说的变形鼠标光标的意思是当你在屏幕上旋转一个 3D 对象时,你单击并拖动鼠标。但是当您到达右侧屏幕的尽头时,您无法再向右拖动,您必须松开鼠标按钮,向左移动鼠标,再次单击并拖动以继续旋转。

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

有没有办法让我达到这种效果(可以简单地通过在鼠标到达边界时从 JS 脚本或 C++ 后端设置位置或通过 grab鼠标并检索相对位置,这可以在某些窗口库中完成)。

【问题讨论】:

【参考方案1】:

我不完全了解您的需求,但也许 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()
    

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

【讨论】:

不知道你可以只集成 QCursor 并且它会毫无问题地连接到光标,它工作。我编辑了我的问题以更好地解释 warping 光标 的意思 setPosQCursor 的静态成员 @ferri,你是对的。所以不需要private QCursor cursor;

以上是关于如何在 QML 中设置鼠标光标位置的主要内容,如果未能解决你的问题,请参考以下文章

jQuery在文本区域中设置光标位置

如何在 Codemirror 编辑器中设置光标位置

如何在应用程序窗口外设置光标位置? (C ++)

在文本小部件中设置光标位置

在 Win32 控制台应用程序中设置光标位置

在 SwiftUI TextEditor 中设置光标位置