簡體   English   中英

來自C ++類的qtquick應用程序事件處理

[英]qtquick application event handling from c++ class

我使用QtQuick應用程序設計了帶有一些按鈕,文本區域的基本UI。 我需要用C ++編寫事件處理程序來處理按鈕單擊之類的事件。 如何從C ++文件訪問qml元素?

從C ++訪問QML元素不是一個好習慣。 我將通過一個簡單的示例向您展示一種更受歡迎的方法。

  • 編寫一個繼承QObject的C ++類(該類將實現事件發生時要調用的方法)(例如)

[或者Controller.h]

#ifndef CONTROLLER_H
#define CONTROLLER_H

#include <QObject>

class Controller : public QObject
{
    Q_OBJECT
public:
    explicit Controller(QObject *parent = 0);
    Q_INVOKABLE void onItemClicked();
};

#endif // CONTROLLER_H

[controller.cpp]

#include "controller.h"
#include <QDebug>

Controller::Controller(QObject *parent) : QObject(parent)
{
}

void Controller::onItemClicked()
{
    qDebug() << "The item was clicked";
}
  • 創建該類的實例,並將其設置為運行QML UI的QQmlEngine中的上下文屬性。 遵循Qt Quick應用程序的典型“ main.cpp”。

[main.cpp中]

#include <QtGui/QGuiApplication>
#include <QQmlEngine>
#include <QQmlContext>
#include "qtquick2applicationviewer.h"
#include "controller.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QtQuick2ApplicationViewer viewer;
    Controller c;
    viewer.engine()->rootContext()->setContextProperty("Controller", &c);
    viewer.setMainQmlFile(QStringLiteral("qml/quicktest/main.qml"));
    viewer.showExpanded();
    return app.exec();
}
  • 現在,您可以從QML代碼中自由調用方法。

[main.qml]

import QtQuick 2.0

Rectangle {
    width: 360
    height: 360
    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            Controller.onItemClicked();
        }
    }
}

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM