qml與C++的交互

簡單說下我自己對qml與c++的交互的理解流程:

1.界面交互,很多新手可能會寫qt界面或者qml界面,但想要把qml與c++結合起來就一臉蒙逼了。首先我提供個簡單的方法實現qml和c++的界面交互,首先引入幾個重要的頭文件,當然在項目文件中需要加QT+= quickwidgets才能引用以下頭文件

#include <QQuickWidget>
#include <QQuickView>
#include <QQmlContext>

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    qmlWidget = new QQuickWidget(this);
    qmlWidget->rootContext()->setContextProperty("View",this);
    qmlWidget->setSource(QUrl(QStringLiteral("qrc:/Staute.qml")));
}

在構造函數裏添加三句代碼就讓Widget界面和qml界面綁定在一起了,簡單吧。溫馨提示:不要忘了在析構函數中delete掉qmlWidget哦,否則重複運行程序會出現異常結束現象

簡單敘述下個人拙見,第一句代碼不用說是qml界面,第二句是爲了把Widget界面用View表示,使得當前界面的屬性能傳入qml界面,簡單說就是如果在qml文件中需要用到this的屬性,使用View.屬性就可以了。

第三句代碼想必各位都理解,就是加載qml文檔。把widge顯示後界面就是你在qml文件編輯的界面了。需要注意的是qml文檔要移到資源文件中去。

如果你想在qml裏面使用Widget的函數或者是成員的話類似View.width;點後面加成員屬性或者函數就可以了。需要注意的有幾點:

想要將一個類或對象導出到qml中必須滿足以下條件

1.從QObject或QObject的派生類繼承

2.使用Q_OBJECT宏

Q_INVOKABLE宏

在定義一個類的成員函數時使用Q_INVOKABLE宏來修飾就可以讓該方法被元對象系統調用,即可使用View.function這種方式訪問c++函數。宏必須放在返回值類型前(最前面)

如果是槽函數則可以省略,因爲槽函數本身能被元對象系統調用。

Q_PROPERTY宏用來定義可通過元對象系統訪問的屬性,通過它定義的屬性可以在QML中訪問、修改還可以在屬性變化時發射特定的信號。這裏給一個簡單的示例:

Q_PROPERTY(int taskid READ returnTaskid WRITE setTaskid NOTIFY tidChange)

public:
int returnTaskid(){return taskid;}
void setTaskid(int id){taskid = id;emit tidChange();}
signals:
    void tidChange();
private:
    int taskid;

順序是成員屬性、成員屬性的get方法、成員屬性的set方法、成員屬性數據變化時發出的信號

本人太懶就粗略介紹下,閒暇時再更新。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章