Qt Quick開發教程3 C 與QML聯合開發

2022-07-25 21:15:12 字數 2070 閱讀 9780

元物件系統(meta-object system):只要乙個cpp類進入了元物件系統,類的方法和屬性就可以在qml中訪問。

要匯出的類需要有以下這種形式:

class qquicktext : public qquickimplicitsizeitem    //必須繼承自qobject類或qobject派生類

; q_enum(halignment)

//定義元物件系統可訪問的列舉型別

qstring m_text;

//text()和settext()不能被qml訪問

qstring text() const

void settext(const qstring & text)

//...

//dolayout()可被qml訪問

q_invokable void dolayout(); // ### qt 6: remove

//所有signals均可以被qml訪問

signals:

//...

//所有slots均可以被qml訪問

slots:

//...

}

類實現完成之後,一般在main.cpp裡進行註冊

//qmlregistertype("uri",1,0,"qmlname");

qmlregistertype("packagename",1,0,"qmlname");

要在qml中使用,還需要再qml檔案中匯入:

import packagename 1.0

rectangle

}

一般使用此方法進行介面設計

以下是將cpp中名為objectname2的物件/變數匯出到qml中objectname1的步驟:

1 註冊屬性:

main.cppengine.load...之前新增一句:

engine.rootcontext()->setcontextproperty("objectname1",objectname2);
2 使用屬性:

匯出的屬性可以直接使用,與屬性關聯的物件,它的訊號,槽,可呼叫方法,屬性均可以在qml使用。

要在c++中使用qml,

import qtquick 2.2

import qtquick.controls 1.2

import qtquick.window 2.1

window

button

}

在cpp中將通過物件名objectname來訪問其屬性。

要訪問該頁面的rootobject及其他object,一般在main.cpp中實現:

//step1: 找rootobject

qobject *root = null;

qlistrootobjects = engine.rootobjects();

int count = rootobjects.size();

for(int i=0;iobjectname() == "rootobject")

}//step2: 找object

qobject *quitbutton = root->findchild("quitbutton");

//step3: process

if(quitbutton)

//step2: 找object

qobject *textlabel = root->findchild("textlabel");

//step3: process

if(textlabel)

C 語言初級入門(3) C 教程

在這最後乙個例子中,我們來看看c 的抽象和多型性。首先我們來定義一下這兩個新的術語。抽象 abstract 通過從多個物件提取出公共部分並把它們併入單獨的抽象類中實現。在本例中我們將建立乙個抽象類shape 形狀 每乙個形狀都擁有返回其顏色的方法,不論是正方形還是圓形 長方形,返回顏色的方法總是相同...

C 語言初級入門(3) C 教程

在這最後乙個例子中,我們來看看c 的抽象和多型性。首先我們來定義一下這兩個新的術語。抽象 abstract 通過從多個物件提取出公共部分並把它們併入單獨的抽象類中實現。在本例中我們將建立乙個抽象類shape 形狀 每乙個形狀都擁有返回其顏色的方法,不論是正方形還是圓形 長方形,返回顏色的方法總是相同...

C 語言初級入門(3) C 教程

在這最後乙個例子中,我們來看看c 的抽象和多型性。首先我們來定義一下這兩個新的術語。抽象 abstract 通過從多個物件提取出公共部分並把它們併入單獨的抽象類中實現。在本例中我們將建立乙個抽象類shape 形狀 每乙個形狀都擁有返回其顏色的方法,不論是正方形還是圓形 長方形,返回顏色的方法總是相同...