日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

qml: C++调用qml函数

發(fā)布時(shí)間:2023/11/30 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qml: C++调用qml函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++調(diào)用qml函數(shù),是通過(guò)下面的函數(shù)實(shí)現(xiàn)的:

?

bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericReturnArgument ret,
QGenericArgument val0 = QGenericArgument( Q_NULLPTR ), QGenericArgument val1 = QGenericArgument(), QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(), QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 = QGenericArgument(), QGenericArgument val6 = QGenericArgument(),
QGenericArgument val7 = QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument val9 = QGenericArgument());

?

這里有兩個(gè)常用的宏:Q_RETURN_ARG,Q_ARG,從字面意思就可以看出來(lái),一個(gè)是用來(lái)獲取返回值,另一個(gè)用于傳參。 下面是一個(gè)例子:

QVariant returnedValue; QVariant msg = "message sended from C++"; QMetaObject::invokeMethod(pctrlobj, "setTextString", Q_RETURN_ARG(QVariant, returnedValue),Q_ARG(QVariant, msg));

在應(yīng)用該函數(shù)調(diào)用qml對(duì)象成員前,關(guān)鍵是要獲取到要調(diào)用的qml對(duì)象,有兩種方案可以很方便的獲取到qml對(duì)象:

1)? 從qml端直接傳QOBject * 到C++端;

2)? 通過(guò)設(shè)置objectName,利用findChild()找到對(duì)應(yīng)的對(duì)象;

第一種方案就不說(shuō)了,很簡(jiǎn)單實(shí)現(xiàn),這里簡(jiǎn)略的講解下第二種方案,? 看下面的例子:

main.qml

import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.3 Window {id: windows;visible: truewidth: 640height: 480title: qsTr("Hello World")Button{id: test;width: 70;height: 30;onClicked: test1.open();}Test1{id: test1;visible: false;onShowTest:{}}function test(){console.log("test ok!");}}

Test1.qml

import QtQuick 2.0 import QtQuick.Window 2.2 import QtQuick.Controls 1.3 Window {id: test;width: 300;height: 200;visible:false;signal showTest();Button{id: testButton;objectName:"testButton" //這里設(shè)置了對(duì)象名稱,用于findChild()獲取對(duì)象;text:"click me";onClicked:{showTest();}}function open(){test.visible = true;}function close(){test.visible = false;}}

  

main.cpp

#include <QGuiApplication> #include <QQmlApplicationEngine> #include <QObject> int main(int argc, char *argv[]) { #if defined(Q_OS_WIN)QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endifQGuiApplication app(argc, argv);QQmlApplicationEngine engine;engine.load(QUrl(QStringLiteral("qrc:/main.qml")));QObject *pRoot = engine.rootObjects().first();QObject *pButton = pRoot->findChild<QObject *>("testButton");if( pButton ){QObject::connect(pButton,SIGNAL(clicked()),pRoot,SLOT(test()));}if (engine.rootObjects().isEmpty())return -1;return app.exec(); }

?

轉(zhuǎn)載于:https://www.cnblogs.com/yinwei-space/p/9013119.html

總結(jié)

以上是生活随笔為你收集整理的qml: C++调用qml函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。