元物件系統(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.cpp
中engine.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 形狀 每乙個形狀都擁有返回其顏色的方法,不論是正方形還是圓形 長方形,返回顏色的方法總是相同...