C 和QML混合程式設計 下 C 中呼叫QML

2021-08-21 03:40:54 字數 2215 閱讀 6649

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 ...