【问题标题】:QQuickView: handling mouse events in C++QQuickView:在 C++ 中处理鼠标事件
【发布时间】:2015-04-13 14:57:49
【问题描述】:

我使用 QQuickView::beforeRendering 事件在 qml 控件下渲染我的 3d 模型。 如果用户在任何 qml 控件之外单击,我想在 C++ 中进行鼠标事件处理/我如何在 QQuickView::mousePressEvent 中发现鼠标在 qml 控件之外被按下?

【问题讨论】:

    标签: c++ qt qml qtquick2 qtquickcontrols


    【解决方案1】:

    我认为使用自定义 QQuickItem 更容易,因为使用自定义 QQuickView 显然意味着您可以在事件到达任何项目之前获得事件。

    这是一个例子:

    #include <QtQuick>
    
    class MyItem : public QQuickItem
    {
    public:
        MyItem() {
            setAcceptedMouseButtons(Qt::AllButtons);
        }
    
        void mousePressEvent(QMouseEvent *event) {
            QQuickItem::mousePressEvent(event);
            qDebug() << event->pos();
        }
    };
    
    int main(int argc, char** argv)
    {
        QGuiApplication app(argc, argv);
    
        QQuickView *view = new QQuickView;
        qmlRegisterType<MyItem>("Test", 1, 0, "MyItem");
        view->setSource(QUrl::fromLocalFile("main.qml"));
        view->show();
    
        return app.exec();
    }
    

    将自定义项放在场景的底部,它将获取所有未处理的鼠标事件:

    import QtQuick 2.3
    import QtQuick.Controls 1.0
    import Test 1.0
    
    Rectangle {
        width: 400
        height: 400
        visible: true
    
        MyItem {
            anchors.fill: parent
        }
    
        Button {
            x: 100
            y: 100
            text: "Button"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 2018-08-15
      相关资源
      最近更新 更多