青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 319, comments - 22, trackbacks - 0, articles - 11
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

詳解QML與C++混合編程使用

Posted on 2011-08-04 22:31 RTY 閱讀(949) 評論(0)  編輯 收藏 引用 所屬分類: 轉(zhuǎn)載隨筆QML

本文適合于對Qt Quick有基本了解的讀者。首先回答一個比較常會被問到的問題:什么是QML,它與Quick的關(guān)系是什么?

Qt QuickQt User Interface Creation Kit的縮寫,而QMLQt Quick最重要的組成部分,Qt Quick結(jié)合了如下技術(shù):

組件集合,其中大部分是關(guān)于圖形界面的

基于JavaScript陳述性語言:QML (Qt Meta-Object Language的縮寫)

用于管理組件并與組件交互的C++ API - QtDeclarative模塊

言歸正傳:通過Qt Creator,我們可以輕松生成一個Qt Quick的應(yīng)用工程,從而為QML生成應(yīng)用程序框架。具體操作詳見:創(chuàng)建qt quick (qml) 應(yīng)用程序。

C++與QML的交互是通過注冊C++對象給QML環(huán)境得以實現(xiàn)的:

C++實現(xiàn)中,非可視化的型別均為QObject的子類,可視化的類型均為QDeclarativeItem的子類。注意:QDeclarativeItem等同于QML的Item類。

如果用戶想要定義自己的型別,做法如下:

在C++中,實現(xiàn)派生于QObject或QDeclarativeItem的子類,它是新定義item的實體對象;

在C++中,將1中實現(xiàn)的新item類型注冊給QML;

在QML中,導(dǎo)入含有1中定義的新item的模塊;

在QML中,向使用標準的item一樣使用新定義的item

現(xiàn)舉例說明,我們現(xiàn)嘗試使用用Qt C++實現(xiàn)的MyButton對象(如下qml代碼),它有自己的屬性、方法以及信號的handler。用法如下(它與使用其它標準的QML item一樣),所需要做的是 需要導(dǎo)入包含MyButton的對應(yīng)模塊名稱及其版本“MyItems 1.0 ”。

  1. //main.qml
  2. import Qt 4.7
  3. import MyItems 1.0
  4. Item {
  5. width: 300; height: 200
  6. MyButton {
  7. //注意:x, y, width, height是繼承自item的屬性,無需再自定義的item中實現(xiàn)
  8. x: 50; y: 50
  9. width: 200; height: 100
  10. color: "gray" //自定義屬性
  11. onMySignals: dosth //自定義信號mySignals
  12. MouseArea {
  13. anchors.fill: parent
  14. onClicked: parent.myColor() // 調(diào)用C++定義的方法myColor
  15. }
  16. }
  17. }
  18. //main.qml
  19. import Qt 4.7
  20. import MyItems 1.0
  21. Item {
  22. width: 300; height: 200
  23. MyButton {
  24. //注意:x, y, width, height是繼承自item的屬性,無需再自定義的item中實現(xiàn)
  25. x: 50; y: 50
  26. width: 200; height: 100
  27. color: "gray" //自定義屬性
  28. onMySignals: dosth //自定義信號mySignals
  29. MouseArea {
  30. anchors.fill: parent
  31. onClicked: parent.myColor() // 調(diào)用C++定義的方法myColor
  32. }
  33. }
  34. }

為了能夠上述qml代碼工作,需要為在Qt C++代碼中注冊MyButton及其所屬的模塊,對應(yīng)的main.cpp代碼如下:

  1. #include <QtGui/QApplication>
  2. #include "qmlapplicationviewer.h"
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication app(argc, argv);
  6. QmlApplicationViewer viewer;
  7. // MyButtonItem是與QML中MyButton相對應(yīng)的C++實現(xiàn)的類名稱
  8. // 1,0是版本信息;MyItems是MyButton所屬的模塊名稱
  9. qmlRegisterType<MyButtonItem>("MyItems", 1, 0, "MyButton ");
  10. viewer.setOrientation(QmlApplicationViewer::Auto);
  11. viewer.setMainQmlFile(QLatin1String("qml/untitled/main.qml"));
  12. viewer.show();
  13. return app.exec();
  14. }
  15. #include <QtGui/QApplication>
  16. #include "qmlapplicationviewer.h"
  17. int main(int argc, char *argv[])
  18. {
  19. QApplication app(argc, argv);
  20. QmlApplicationViewer viewer;
  21. // MyButtonItem是與QML中MyButton相對應(yīng)的C++實現(xiàn)的類名稱
  22. // 1,0是版本信息;MyItems是MyButton所屬的模塊名稱
  23. qmlRegisterType<MyButtonItem>("MyItems", 1, 0, "MyButton ");
  24. viewer.setOrientation(QmlApplicationViewer::Auto);
  25. viewer.setMainQmlFile(QLatin1String("qml/untitled/main.qml"));
  26. viewer.show();
  27. return app.exec();
  28. }

上面我們在QML中MyButton對象,有自己的屬性、方法以及信號的handler,其實現(xiàn)均來自Qt C++。Qt C++需要作以下工作:首先要定義 QML中MyButton相對應(yīng)的C++實現(xiàn)MyButtonItem,它必須繼承自QDeclarativeItem

為了讓MyButton對象能夠使用其Color屬性,MyButtonItem類需要利用QT的PROPERTY系統(tǒng),為Moc聲明其屬性

為了讓MyButton對象能夠使用其myColor方法,MyButtonItem類需要聲明該方法,并標記為Q_INVOKABLE (另外一種解決方案是將myColor聲明為槽。

為了讓MyButton對象能夠接受到C++所emit的信號,并在onMySignals,MyButtonItem類需要聲明mySignals信號

  1. class MyButtonItem : public QDeclarativeItem
  2. {
  3. Q_OBJECT
  4. Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
  5. signals:
  6. void colorChanged();
  7. void mySignals();
  8. public:
  9. MyButtonItem(QDeclarativeItem *parent = 0);
  10. void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
  11. QWidget *widget = 0);
  12. public:
  13. const QColor &color() const;
  14. void setColor(const QColor &newColor);
  15. Q_INVOKABLE QColor myColor() const;
  16. // Alternatives for myColor to be called from QML
  17. //public slots
  18. //QColor myColor() const;
  19. private:
  20. QColor m_color;
  21. };

原始作者地址http://blog.csdn.net/changsheng230

小結(jié):關(guān)于詳解QMLC++混合編程使用的內(nèi)容介紹完了,希望本文對你有所幫助!

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲视频在线看| 国产精品有限公司| 亚洲日本无吗高清不卡| 久久精品一区四区| 久久综合影音| 亚洲国产日韩欧美在线动漫| 亚洲精品老司机| 亚洲天堂视频在线观看| 欧美影院在线| 免费亚洲婷婷| 欧美日韩一区成人| 国产亚洲观看| aa级大片欧美三级| 欧美一区影院| 亚洲国产精品成人久久综合一区| 99精品视频一区二区三区| 午夜精品一区二区三区电影天堂| 久久亚洲一区二区三区四区| 欧美精品国产一区| 国产日本亚洲高清| 99国产精品视频免费观看| 欧美一区2区三区4区公司二百| 久久免费一区| 亚洲少妇自拍| 欧美高清在线一区二区| 国产亚洲毛片| 亚洲一区免费| 亚洲人www| 久久精品30| 欧美一区二区三区日韩视频| 久久精品91久久香蕉加勒比| 亚洲激情一区二区| 欧美亚洲一区| 欧美成人蜜桃| 在线观看成人av| 性色一区二区| 亚洲美女毛片| 欧美成人首页| 亚洲福利一区| 久久婷婷综合激情| 亚洲在线不卡| 欧美日韩一区二区在线| 亚洲日本欧美| 久久综合导航| 欧美亚洲视频| 国产一区二区欧美| 久久国产成人| 欧美在线网站| 国产真实久久| 久久这里只精品最新地址| 亚洲欧美日韩一区二区| 国产精品高潮呻吟久久av无限 | 国产亚洲电影| 午夜国产精品视频| 国产精品99久久久久久白浆小说 | 久久国产一区| 午夜久久久久久| 国产婷婷色一区二区三区四区| 亚洲在线不卡| 亚洲专区在线| 国产视频精品va久久久久久| 久久精品国产清自在天天线 | 新67194成人永久网站| 国产精品久久久久aaaa九色| 亚洲视频精品在线| 这里只有视频精品| 国产精品捆绑调教| 欧美亚洲在线播放| 性欧美xxxx大乳国产app| 国产亚洲精品美女| 老司机凹凸av亚洲导航| 久久中文精品| 一二三区精品| 亚洲欧美另类在线| 伊人久久婷婷| 亚洲区第一页| 国产精品欧美日韩一区| 久久久久久999| 蜜臀久久99精品久久久久久9| 久久久午夜视频| 亚洲第一毛片| 日韩一级精品| 国产日韩在线看片| 欧美国产精品日韩| 欧美日韩中文在线观看| 性久久久久久久| 久久久国产精品一区| 亚洲人精品午夜| 亚洲午夜精品久久久久久app| 国产色产综合产在线视频| 欧美福利精品| 国产精品露脸自拍| 欧美a级大片| 国产精品成人av性教育| 久久午夜影视| 欧美三级电影大全| 久久亚洲春色中文字幕久久久| 欧美国产成人精品| 久久精品夜色噜噜亚洲a∨| 欧美第一黄色网| 久久不射中文字幕| 欧美日韩精品欧美日韩精品一| 久久精品道一区二区三区| 免费亚洲电影在线| 久久久999国产| 国产精品国产三级国产专区53| 久久综合激情| 国产精品男人爽免费视频1| 欧美v日韩v国产v| 国产农村妇女毛片精品久久麻豆 | 欧美特黄视频| 欧美黄色小视频| 国产亚洲亚洲| 中文一区二区在线观看| 日韩午夜一区| 嫩草成人www欧美| 久久久亚洲国产美女国产盗摄| 欧美日韩一二区| 亚洲国产精品va在看黑人| 国内自拍亚洲| 午夜视频在线观看一区| 亚洲欧美久久久久一区二区三区| 欧美3dxxxxhd| 亚洲第一精品福利| 永久域名在线精品| 欧美一区免费视频| 久久国产精品久久国产精品| 国产精品v欧美精品v日本精品动漫| 欧美激情一区二区三区高清视频| 国产欧美在线视频| 亚洲一区二区免费| 亚洲欧美日韩精品| 欧美精品在线观看91| 欧美不卡在线视频| 亚洲国产精品ⅴa在线观看| 久久久久免费| 欧美v日韩v国产v| 亚洲娇小video精品| 免费日韩一区二区| 亚洲高清在线播放| 亚洲精一区二区三区| 欧美制服丝袜| 久久久在线视频| 欧美日韩亚洲国产一区| 最新国产乱人伦偷精品免费网站| 亚洲三级电影在线观看| 欧美成人精品激情在线观看| 欧美成人资源| 最新日韩在线视频| 欧美激情乱人伦| 亚洲精品资源| 亚洲一区在线免费| 国产精品麻豆成人av电影艾秋| 99精品热6080yy久久 | 99精品国产一区二区青青牛奶 | 亚洲大胆人体视频| 久久国内精品自在自线400部| 久热精品视频在线观看一区| 亚洲国产婷婷香蕉久久久久久99| 欧美高清日韩| 亚洲自拍啪啪| 欧美1区2区3区| 中日韩视频在线观看| 国产视频丨精品|在线观看| 狼人社综合社区| 一区二区三区高清视频在线观看| 久久精品国产一区二区三区免费看| 亚洲成人在线视频播放| 欧美日韩国产综合视频在线| 亚洲伊人一本大道中文字幕| 先锋亚洲精品| 国产一区二区三区高清在线观看 | 免费成人黄色| 一区二区三区高清在线| 国产精品推荐精品| 老司机精品导航| 亚洲视频999| 欧美大片免费久久精品三p| 亚洲欧美美女| 亚洲精品中文字幕女同| 国产精品ⅴa在线观看h| 午夜精品久久久久久久| 亚洲激情网站免费观看| 久久青草久久| 亚洲欧美清纯在线制服| 亚洲精品一区二区网址| 国产综合色在线| 国产老女人精品毛片久久| 欧美精品www| 久久久久久久久久久久久女国产乱| 日韩午夜三级在线| 欧美国产日韩一区二区| 久久久久.com| 亚洲欧美亚洲| 在线视频欧美精品| 亚洲精选成人| 在线精品一区二区| 国产视频精品xxxx| 国产精品丝袜91| 国产精品久久99|