专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

QML与C混合开发(详细总结)

  一、引言
  在QtQuick开发中,QML应用程序通常需要用C来处理高级和性能密集型的任务。为了实现这一点,最常见、最便捷的方法是:向QML运行时环境公开C类(注意:该C类必须派生自QObject),在Qt5。7或更高版本中,本文将描述以下两个问题:(1)如何在QML应用程序中使用C类。
  (2)向QML导出C方法(包括槽函数)二、如何在QML应用程序中使用C类(21)创建一个C类:classDatasdatas。h头文件ifndefDATASHdefineDATASHincludeQObjectincludeQStringclassDatas:publicQObject{QOBJECTQPROPERTY(QStringmageREADgetAgeWRITEsetAgeNOTIFYageChanged)public:explicitDatas(QObjectparentnullptr);QStringgetAge(){returnmage;}voidsetAge(constQStringage){mageage;emitageChanged();}signals:voidageChanged();private:QStringmage;};endifDATASHdatas。cppincludedatas。hDatas::Datas(QObjectparent):QObject(parent),mage(25){}
  上述代码中,在C类中使用QPROPERTY宏声明了一个可以从QML访问的属性,这里是mage属性;并声明了读、写该属性的方法:getAge()和setAge();同时声明了该属性改变时所发出的信号:ageChanged():QPROPERTY(QStringmageREADgetAgeWRITEsetAgeNOTIFYageChanged)(22)注册C类
  在上述步骤中,我们定义了一个C类,为了在QML环境中使用该类,需要将它注册到QML上下文环境中:
  main。cincludeQGuiApplicationincludeQQmlApplicationEngineincludeQQmlContextincludedatas。hintmain(intargc,charargv〔〕){ifQTVERSIONQTVERSIONCHECK(6,0,0)QCoreApplication::setAttribute(Qt::AAEnableHighDpiScaling);endifQGuiApplicationapp(argc,argv);QQmlApplicationEngineengine;Datasmdatas;QQmlContextqmlctxengine。rootContext();qmlctxsetContextProperty(cppdatas,mdatas);constQUrlurl(QStringLiteral(qrc:main。qml));QObject::connect(engine,QQmlApplicationEngine::objectCreated,app,〔url〕(QObjectobj,constQUrlobjUrl){if(!objurlobjUrl)QCoreApplication::exit(1);},Qt::QueuedConnection);engine。load(url);returnapp。exec();}
  使用QQmlContex的setContextProperty()成员函数向QML运行上下文环境注册C类型,如下:Datasmdatas;QQmlContextqmlctxengine。rootContext();qmlctxsetContextProperty(cppdatas,mdatas);注册mdatas(23)在QML中使用C类中声明的数据。
  在main。c文件中,我们已经将Datas类的实例mdatas注册到到了QML运行上下文环境中,接下来,我们则可以在QML中使用该类中声明的数据了:
  main。qml文件importQtQuick2。15importQtQuick。Window2。15importQtQuick。Controls2。15Window{id:windowwidth:640height:480visible:truecolor:117c90title:qsTr(演示Author:iriczhao)Button{id:buttonx:270y:345text:qsTr(Click)onClicked:{label。textcppdatas。mage;}}Label{id:labelx:168y:134width:305height:45color:fffffftext:qsTr(iriczhao)horizontalAlignment:Text。AlignHCenterverticalAlignment:Text。AlignVCenterfont。bold:true}}
  如上代码所示,在应用中放置了一个Button和Label,当点击Button后,Label标签的文本属性将被C类中的mage赋值。即应用界面将显示25。(24)效果
  三、向QML导出C方法(包括槽函数)
  在上文中,描述了如何向QML公开C类的数据属性。那么对于C类的方法同样也能公开给QML。具体步骤如下:(31)声明C成员函数
  对于QObject派生类型的所有方法都可以从QML代码中访问。例如:
  (1)使用QINVOKABLE宏标记的公共方法。
  (2)QtC公共槽函数。
  如下代码片段:classMessageBoard:publicQObject{QOBJECTpublic:QINVOKABLEboolpostMessage(constQStringmsg){qDebug()CalledtheCmethodwithmsg;returntrue;}publicslots:voidrefresh(){qDebug()CalledtheCslot;}};
  postMessage()函数使用QINVOKABLE标记;refresh()函数是一个公共槽函数,所以这两个函数都能从QML中访问。(32)注册C类
  同样的,为了使用C类中的方法(包括槽函数),需要将C类注册到QML上下文环境中(这里是MessageBoard类):MessageBoardmsgBoard;实例MessageBoardview。engine()rootContext()setContextProperty(cppmsgBoard,msgBoard);将msgBoard注册到QML上下文环境中(33)在QML中使用C类的方法
  如下代码片段:importQtQuick2。0Item{width:100;height:100MouseArea{anchors。fill:parentonClicked:{varresultmsgBoard。postMessage(HellofromQML)console。log(ResultofpostMessage():,result)msgBoard。refresh();}}
  上述代码中,使用msgBoard调用postMessage()和refresh()方法访问到了C类中的方法。四、总结
  (1)如果需要在QML中访问C类中的数据成员。需要使用QPROPERTY声明该数据成员,并声明对数据成员的读、写函数以及数据改变时的关联信号。
  然后使用QQmlContex的setContextProperty()将C类注册到QML上下文中。
  (2)如果需要在QML中访问C方法(包括槽函数),这里分为两种情况:如果该函数是一个公共函数,我们需要使用QINVOKABLE宏去标记它。如果是一个公共的槽函数,则可以直接访问。
  同样的,使用QQmlContex的setContextProperty()将C类注册到QML上下文中。
  搜索关注嵌入式小生vx公众号,获取更多精彩内容。

传奇手游热血屠龙,传奇永不停歇,脚踩盟重土城,暴打大BOSS兄弟们,大家好,今天爷带来的是一款经典传奇游戏,盟重之龙城天下。这款游戏可谓是来势凶猛,直接拉走了一大批的传奇玩家,为什么那么吸引人呢,就在于他跟老传奇对比,不说差不多吧,简直就是千年盛世手游梦回千年,江湖相见!哈喽,观众朋友们大家好啊,今天给大家简单介绍一下千年这款手游。提到千年盛世相信大多数人还是比较陌生的,但他却是仙侠游戏的鼻祖。随着各种各样的游戏推出,千年慢慢的淡出了大家的视野!不勇敢的心世界大战评测勇敢的心世界大战是一款以第一次世界大战为背景的游戏,玩家将扮演普通四个普通的小人物(埃米尔安娜埃米尔的女婿卡尔美国人佛雷迪),参加各种任务,体验战争的残酷和荣耀。以下是对该游戏的测家庭常用香料花椒,只需每天2毛钱,不只做菜提香,还可以防蚊虫花椒是我们平时烹调最常用的香辛料之一了,有的人对它的气味敬而远之,有的人则很喜欢品尝。我们只知道花椒可以炒菜和炖煮,那它的妙用大家知道几个呢?小编为大家总结了几点,都是日常可以使用神奇束骨穴,又称落枕穴,中医通经活络,治疗项僵脖子痛的要穴如何做健康老年人相信很多人老年人经历过以颈部疼痛,颈项僵硬为主要症状的落枕,也知道这是一个非常难受的疾患。我也相信很多人落枕之后会表现得惊慌失措,没有掌握哪怕是一点点的应急处理办法男人想要坑你时,会在这三件事上露馅,第二件最隐秘虽然恋爱脑的行为常常被吐槽,但如果一个人自己说自己恋爱脑,其实也不全是缺点。起码说明这个人在一段感情里,对于喜欢的人是很纯粹的,仅因为荷尔蒙上头就可以全情投入,没有太多现实的利益考不给你这两样东西的男人,就没想过和你有未来关键词想结束异地,他转头去了一个很远的城市问我跟我男朋友都是大概5万10万的收入,我在国企上班,有社保,是一份稳定工作我男朋友在私企,没有社保。我自己有一套房子,他没有我没有车,他五种异常出汗,男人容易虚第一种头汗,意思也就是在头上容易出汗。这一般都是因为胃有热,热向上熏蒸头部引起的。这种有个典型的特点,就是平时不出汗,但一到吃饭的时候,就满头大汗,甚至往下流。而且这类人平时容易上十大优秀户外运动手表推荐(九)佳明Forerunner955Dualpower十大优秀户外运动手表更新到了第九篇。在前面的文章里已经有很多朋友多次提到了佳明的运动手表,今天就来介绍一下佳明的旗舰智能运动手表Forerunner955Dualpower,日本官别再这样定闹钟了!醒来后真的更容易累俗话说的好大清早的闹铃,狗都嫌。如果是苹果手机的默认铃声,那更叫一个人神共愤。谁懂!早上睡得正酣,突然一声巨响伴随夺魂音调,直接一个垂死梦中惊坐起,差一点就见太奶。在网上搜一搜,会蘑菇都被拿来做电脑了,就不怕电脑真死机吗在美剧最后生还者里面,有一个设定是,感染者可以通过真菌进行信息传导和交流。这就让他们不再像无头苍蝇一样各自为战,而是可以组队发动袭击。最近,世超才知道这个设定,还真不能说是编剧拍脑
红米K60又有新料天玑9200大底,标准版IMX686Pro版IMX890虽然我对小米的好感止步于品控方面,但还是不得不感叹,如果没有小米1s,手机界不知道还有多少水分没被打下来。红米K50系列也是我认为整个2022年最良心的配置功耗控制并且脚踢骁龙88火遍世界的清朝女科学家,却为何鲜为人知?我们知道中国古代有很多文学家,科学家却不多,科学家中,女性就更少了。但在清朝却有一位女子,她虽然只活了29岁,却被记入美国畅销书影响世界历史的50位女科学家,金星陨石坑以她命名,她内蒙古3款倒霉酒,明明酒质了得,出了本地却鲜为人知,为何内蒙古3款倒霉酒,明明酒质了得,出了本地却鲜为人知,为何天苍苍野茫茫,风吹草低见牛羊,说的的就是我国北方的内蒙古大草原,随着近些年旅游行业的发展,内蒙古也成为了大家必去的一个地方。油价宣布上涨!这日子还过不过了11月7日24时,国内新一轮成品油调价窗口将开启,油价或呈两连涨走势,国内汽柴油零售价预计上调140元吨(报道来自中国新闻网)。预计加满一箱油将多花6元左右。素材来自中国新闻网20东北振兴迎来历史性机会周五的市场因为德国总理舒尔茨访华的消息掀起波澜,两市大幅上涨,三大股指开盘后一路震荡走高,深成指和创业板指均涨超3,沪指重新站上3000点,一扫阴霾。此次德国在进博会展示的产品也是百度造车交卷,后来者集度还有机会吗?图片来源于度哥科技巨头们跨界造车的交卷时刻到了,这一次,终于轮到百度。最近,百度旗下集度汽车发布了首个量产车型ROBO01探月限定版,并喊出了到2028年具备全年交付80万辆车的能写下历史英雄联盟DRX血战五局击败T1,登顶2022世界冠军英雄联盟2022世界大赛总决赛今(6)日于美国加州旧金山的大通银行中心终于登场!今年冠军战对战由暌违五年重返总决赛的T1对上首支从入围赛晋级总决赛LCK第四种子DRX,更有Fake荣耀X40GT评测千元价位段的性能之王前言老旗舰U做中端机,我们来测测前段时间,我们三易生活曾在相关内容中,称赞过用老旗舰SoC做千元中端手机的产品思路。这类产品有什么好处呢?一方面大家都知道,如今手机行业的市场竞争主王者荣耀对抗路克制链盘点,两英雄轻松打吕布,再也不怕暗信大家好,我是秋豆。最近王者峡谷兴起了辅助1级跟对抗路拿1血的新套路,这套路确实有用。可对抗路带辅助,那是肾虚的表现。作为最能体现对线技术的位置,对抗路讲究的就是单挑肉搏。虽然说英雄王者荣耀IP价值综合排名游戏类第一名,得益于文化与时代的大融合在新华社公布的新一年新华文化产业IP指数(2022)国产头部IP价值集聚效应显著,IP主流时代或将来临报告中,王者荣耀在文化产业综合榜top50中大排名第三位,也是唯一一款进入前十价格相当!荣耀X40GT和红米Note11TPro哪个好?答案告诉你这样选荣耀X40GT和红米Note11TPro虽然门槛价差距较大,但是相同存储版本仅仅存在100200元的差距,作为同价位热度极高的两款5G机型,由于价格与定位相当,形成相争之局势,因此
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软网