pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

C++ 信號到 Qt 中的 QML 插槽

C++ signal to QML slot in Qt(C++ 信號到 Qt 中的 QML 插槽)
本文介紹了C++ 信號到 Qt 中的 QML 插槽的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我想將信號從 C++ 發送到我的 QML 文件中的插槽.我已經讓它在沒有原始類型參數的情況下工作,但如果我想將 QString 發送到我的 QML 插槽,我在連接時會收到錯誤.

I want to send a Signal from C++ to a Slot in my QML File. I already got it working without and primitive type parameters, although if I want to send a QString to my QML Slot I get an error whilst connecting.

我在 main.cpp 中連接

I connect in main.cpp

QObject *contentView = rootObject->findChild<QObject*>(QString("contentView"));
QObject::connect(&myObj,      SIGNAL(finishedGatheringDataForItem(QString)), 
                 contentView, SLOT(updateViewWithItem(QString)));

我的qml文件的相關部分

the relavant part of my qml File

Rectangle {
        objectName: "contentView"
        function updateViewWithItem(string) { console.log('got some Items'); }  // slot
}

錯誤:

Object::connect: No such slot QDeclarativeRectangle_QML_2::updateViewWithItem(QString)

推薦答案

我認為最好查看本教程:

I think it would be best if you check this tutorial:

http://doc.qt.io/qt-4.8/qtbinding.html

尤其是這部分:

http://doc.qt.io/qt-4.8/qtbinding.html#receiving-signals

我認為您在這種情況下的錯誤可能是您沒有將其聲明為插槽,或者您沒有使其可調用.Qt 教程中解釋了這兩個選項.

I think your mistake in this case might either be that you didn't declare it as a slot or you didn't make it invocable. Both options are explained in the Qt Tutorial.

此外,您需要使用 QVariant 來在 C++ 和 QML 之間交換數據.您還可以注冊類型,例如小部件和東西,以便您可以在 QML 中將它們用作本機"類型,例如矩形.在大多數情況下,不建議這樣做,除非您需要某些特定的外部類或某些無法在 QML 界面中顯示的數據.

Also, you need to use a QVariant in order to exchange data between C++ and QML. You can also register types, e.g. Widgets and stuff, so that you can use them in QML as a "native" type like a rectangle. In most cases this is not recommended, except if you need some certain extern class or some data that you cannot display otherwise in your QML Interface.

QVariant 的原因是 QML 的基于腳本的方法.QVariant 基本上包含您的數據和數據類型的描述,以便 QML 知道如何正確處理它.這就是為什么你必須在 QML 中用 String、int 等指定參數.但與 C++ 的原始數據交換仍然是 QVariant

The reason for the QVariant is the Script based approach of QML. The QVariant basically contains your data and a desription of the data type, so that the QML knows how to handle it properly. That's why you have to specify the parameter in QML with String, int etc.. But the original data exchange with C++ remains a QVariant

我之前用過qmlRegisterType,但是對于簡單的數據類型是非常不方便的解決方案.它更適合用于更復雜的數據,例如 QML 本身不支持或擴展 QStandardItemModels 的自定義小部件、畫布或視頻元素.這是在 QML 和 C++ 之間交換數據的一種更方便的方式,并且首先不需要信號或插槽,因為 QStandardItemModel 會自動更新 GUI.要使用 QStandardItemModel,您需要使用 qmlRegisterType.. 注冊類型.然后可以在基于模型的視圖中使用模型,例如 ListView 等.

I have used the qmlRegisterType before, but it is a very inconvenient Solution for simple data types. It is rather used for more complex data, such as custom Widgets, Canvas or Video elements that QML does not natively support or extended QStandardItemModels . It is a more convenient way to exchange data between QML and C++ and does not need Signals or Slots in first instance, because the QStandardItemModel updates the GUI automatically. For using the QStandardItemModel you need to register the Type with qmlRegisterType.. . The Model can then be used in Model based Views such as the ListView etc.

我附上了這個主題的教程,它描述了如何使用 QListModel.

I attached a tutorial for this topic, it describes how to use the QListModel.

http://doc.qt.io/qt-4.8/qdeclarativemodels.html

這篇關于C++ 信號到 Qt 中的 QML 插槽的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數據?)
In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環: for( int i = 1, double i2 = 0;)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環?)
Reusing thread in loop c++(在循環 C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環形?)
主站蜘蛛池模板: 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 肉嫩度仪-凝胶测试仪-国产质构仪-气味分析仪-上海保圣实业发展有限公司|总部 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 智能型高压核相仪-自动开口闪点测试仪-QJ41A电雷管测试仪|上海妙定 | 江西自考网-江西自学考试网| 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 液氮罐(生物液氮罐)百科-无锡爱思科 | 999范文网_优质范文下载写作帮手| 万烁建筑设计院-建筑设计公司加盟,设计院加盟分公司,市政设计加盟 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 | 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 特种阀门-调节阀门-高温熔盐阀-镍合金截止阀-钛阀门-高温阀门-高性能蝶阀-蒙乃尔合金阀门-福建捷斯特阀门制造有限公司 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 便携式谷丙转氨酶检测仪|华图生物科技百科 | 纯化水设备-EDI-制药-实验室-二级反渗透-高纯水|超纯水设备 | 北京四合院出租,北京四合院出售,北京平房买卖 - 顺益兴四合院 | GEDORE扭力螺丝刀-GORDON防静电刷-CHEMTRONICS吸锡线-上海卓君电子有限公司 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 博博会2021_中国博物馆及相关产品与技术博览会【博博会】 | 振动台-振动试验台-振动冲击台-广东剑乔试验设备有限公司 | 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | 南京和瑞包装有限公司| 脉冲布袋除尘器_除尘布袋-泊头市净化除尘设备生产厂家 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 磁力加热搅拌器-多工位|大功率|数显恒温磁力搅拌器-司乐仪器官网 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 送料机_高速冲床送料机_NC伺服滚轮送料机厂家-东莞市久谐自动化设备有限公司 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 动物解剖台-成蚊接触筒-标本工具箱-负压实验台-北京哲成科技有限公司 | 最新范文网_实用的精品范文美文网| 东莞工作服_东莞工作服定制_工衣订做_东莞厂服 |