c++中呼叫qml,主要通過呼叫qml物件成員,方法以及與qml訊號關聯:
item
為了能夠在c++中訪問qml定義的成員變數somevalue,可以使用qqmlproperty的read()和write()、qobject::setproperty()和qobject::property()
在main.cpp中
qobject *object=engine.rootobjects().at(0);
qdebug()<<"property value:"
qqmlproperty::write(object,"somevalue",5000);
qdebug()<<"property value 2:"
object->setproperty("somevalue",100);
qdebug()<<"property value 3:"
qdebug()<<"property width value:"
利用c++的函式qmetaobject::invokemothod()可以呼叫所有qml的方法。qml提供的方法的引數和返回值通常傳遞為 c++提供的qvariant型別值。
qml中定 function myqmlfunction(msg)
main.cpp中呼叫:
qvariant returnedvalue;
qvariant msg1=」hello from c++」;
//c++ 呼叫qml 方法
qmetaobject::invokemethod(object,」myqmlfunction」,q_return_arg(qvariant,returnedvalue),q_arg(qvariant,msg1));
qdebug()<<」qml function returned:」
<< returnedvalue.tostring();.
qml中所有的訊號都可以與c++的槽函式關聯。為了能夠與qml訊號關聯,在c++中均使用qobject類提供connecqml中定義訊號:
signal qmlsignal(string qmlmsg)
button
c++中定義槽函式:
message類中
public slots:
void qmltocppslot(qstring );
void message::qmltocppslot(qstring str)
main.cpp中連線對應訊號槽:
qobject *object=engine.rootobjects().at(0);
qobject::connect(object,signal(qmlsignal(qstring )),&msg,slot(qmltocppslot(qstring ))); //連線qml訊號到c++槽
定義changeqmlcolor類,用定時器去定時更新qml介面
changeqmlcolor::changeqmlcolor(qobject *target, qobject *
parent)
: qobject(parent)
, m_timer(this)
, m_target(target)
qcolor color = qcolor::fromrgb(qrand()%
256, qrand()%
256, qrand()%
256);//qml主介面顏色改變
m_target->
parent()->setproperty("color", color);
在main.cpp中:
qobject *object=engine.rootobjects().at(0);
qobject * quitbutton =object->findchild("quitbutton");
new changeqmlcolor(quitbutton);
在qml中 objectname: 「quitbutton」的按鈕的父類就是頂層root,因此c++中m_target->parent()->setproperty(「color」, color);實際上就是設定了window的背景色 QML和C 混合程式設計 (一)
本教程介紹在c 應用程式中擴充套件使用qml。著重介紹了qml的核心特性 如屬性 訊號和槽。還有通過外掛程式來銷毀這些擴充套件。翻譯來自qt的官方的英文教程。qt qml 提供了一些api,使得可以通過c 進行擴充套件。你可以自行書寫這些擴充套件,來增加到你自己的qml型別中。簡而言之,qml的型別...
QML實戰筆記4 QML和C 混合程式設計
在qml中呼叫c 1.首先建立c 類 如果想在qml中使用c 列舉,可以使用q enums巨集將該列舉註冊到元物件系統中。如 enum color q enums color 如果想通過元物件系統訪問c 類的屬性,可以使用q property。如 q property qcolor color re...
C 和C 混合程式設計
由於歷史原因,很多時候我們的 並不完全是使用.net寫成的。這時候和以往c 的混合程式設計就顯得相當重要了。最近碰到了這樣的問題,將方法簡要記述如下。要在c 中呼叫c 函式,大體的思路是這樣的 首先將c 函式寫成dll形式的庫,然後在c 中匯入dll中的函式進行呼叫。具體的 類似這樣 c 1int ...