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

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

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

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

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

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

組件集合,其中大部分是關于圖形界面的

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

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

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

C++與QML的交互是通過注冊C++對象給QML環境得以實現的:

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

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

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

在C++中,將1中實現的新item類型注冊給QML;

在QML中,導入含有1中定義的新item的模塊;

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

現舉例說明,我們現嘗試使用用Qt C++實現的MyButton對象(如下qml代碼),它有自己的屬性、方法以及信號的handler。用法如下(它與使用其它標準的QML item一樣),所需要做的是 需要導入包含MyButton的對應模塊名稱及其版本“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中實現
  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() // 調用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中實現
  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() // 調用C++定義的方法myColor
  32. }
  33. }
  34. }

為了能夠上述qml代碼工作,需要為在Qt C++代碼中注冊MyButton及其所屬的模塊,對應的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相對應的C++實現的類名稱
  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相對應的C++實現的類名稱
  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,其實現均來自Qt C++。Qt C++需要作以下工作:首先要定義 QML中MyButton相對應的C++實現MyButtonItem,它必須繼承自QDeclarativeItem

為了讓MyButton對象能夠使用其Color屬性,MyButtonItem類需要利用QT的PROPERTY系統,為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

小結:關于詳解QMLC++混合編程使用的內容介紹完了,希望本文對你有所幫助!

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品美女久久| 欧美福利影院| 99re热这里只有精品视频| 一区二区三区在线高清| 一个人看的www久久| 亚洲人成精品久久久久| 欧美成人tv| 免费久久99精品国产自| 韩国av一区二区| 欧美日韩999| 浪潮色综合久久天堂| 国产精品美女www爽爽爽| 国产亚洲欧美一级| 韩国成人理伦片免费播放| 久久久久久久久久久久久女国产乱| 国产精品国产三级国产普通话蜜臀 | 久久久久看片| 久久久五月婷婷| 亚洲一区二区久久| 在线看欧美视频| 国产精品高潮视频| 国产欧美视频一区二区三区| 欧美激情a∨在线视频播放| 国产欧美日韩综合一区在线观看 | 西西人体一区二区| 欧美在线观看网站| 国产一区二区精品久久| 91久久精品国产91性色| 久久午夜精品| 久久中文字幕一区| 亚洲久久一区二区| 一区二区三区成人精品| 免费成人高清视频| 欧美成人日本| 国语自产在线不卡| 久久久久网址| 久久偷窥视频| 欧美麻豆久久久久久中文| 久久久久久91香蕉国产| 亚洲福利视频二区| 亚洲欧美电影在线观看| 新狼窝色av性久久久久久| 亚洲男女自偷自拍| 久久亚洲捆绑美女| 伊人婷婷久久| 一本久道久久综合婷婷鲸鱼| 一本久道久久综合中文字幕| 99av国产精品欲麻豆| 国产精品jvid在线观看蜜臀| 国产精品亚洲人在线观看| 亚洲第一中文字幕在线观看| 宅男噜噜噜66国产日韩在线观看| 亚洲免费av网站| 国产精品久久国产精品99gif| 久久久久久亚洲精品杨幂换脸| 欧美一级视频精品观看| 男女激情久久| 国产精品久久久久久久久借妻 | 老司机亚洲精品| 亚洲一线二线三线久久久| 久久免费午夜影院| 欧美福利网址| 久久综合久久综合久久| 欧美日韩一区视频| 亚洲三级视频在线观看| 欧美在线短视频| 欧美日韩在线观看一区二区| 亚洲二区在线视频| 国产欧美在线观看一区| 日韩视频一区二区三区在线播放免费观看 | 国产女优一区| 亚洲小视频在线观看| 欧美日韩中国免费专区在线看| 亚洲欧洲精品成人久久奇米网 | 99爱精品视频| 亚洲大片一区二区三区| 亚洲一区二区三区四区在线观看| 日韩亚洲国产欧美| 久久嫩草精品久久久精品| 国产欧美日本在线| 欧美一区二区在线看| 久久久久久一区二区| aa级大片欧美三级| 午夜国产精品影院在线观看| 欧美在线视频二区| 欧美11—12娇小xxxx| 一本色道久久88亚洲综合88| 欧美一区二区三区四区在线观看地址| 在线观看视频一区二区欧美日韩 | 国产偷自视频区视频一区二区| 亚洲高清视频在线观看| 亚洲欧美日韩精品久久亚洲区| 一本一本久久a久久精品牛牛影视| 久久精品91| 国产视频一区二区在线观看 | 国产精品va在线播放| 亚洲国产另类精品专区| 久久超碰97人人做人人爱| 亚洲欧美成人一区二区三区| 欧美精品一区二区三区一线天视频 | 国产精品欧美日韩久久| 亚洲日本国产| 欧美精品一区二区三区视频| 欧美激情国产日韩| 国产精品久久九九| 亚洲一区二区精品视频| 国产精品日韩一区二区三区| 亚洲免费中文字幕| 一本一本久久| 国产精品成人v| 久热re这里精品视频在线6| 亚洲理论在线| 久久se精品一区精品二区| 欧美日韩精品一二三区| 亚洲午夜精品网| 久久综合九色99| 亚洲欧美日韩一区二区三区在线| 国产精品久久久久久亚洲调教| 欧美激情视频一区二区三区不卡| 亚洲欧美在线磁力| 欧美xx视频| 久久精品亚洲乱码伦伦中文| 欧美久久精品午夜青青大伊人| 亚洲片在线观看| 欧美一站二站| 亚洲精品在线观看视频| 午夜影院日韩| 9l国产精品久久久久麻豆| 亚洲欧美日本视频在线观看| 日韩亚洲一区在线播放| 黑人巨大精品欧美黑白配亚洲| 国产精品亚洲аv天堂网| 欧美日韩色一区| 欧美日韩国产精品成人| 欧美日韩hd| 国产精品视频不卡| 欧美精品在线免费| 亚洲一区在线免费| 亚洲福利一区| 最新日韩av| 亚洲精品欧美极品| 日韩亚洲欧美一区| 亚洲尤物视频网| 久久亚洲精品一区二区| 久久人人爽人人爽爽久久| 久久亚洲精品一区| 亚洲免费观看在线观看| 午夜精品久久久久| 蜜臀av一级做a爰片久久| 欧美日韩系列| 永久域名在线精品| 亚洲综合日本| 亚洲国产精品久久精品怡红院| 亚洲欧洲精品天堂一级| 亚洲图片欧洲图片av| 亚洲国产成人精品久久久国产成人一区 | 欧美高清视频一二三区| 亚洲美女在线视频| 欧美在线视频观看| 国产精品国产自产拍高清av| 国内精品视频久久| 国产精品成人一区二区网站软件| 国产精品免费一区豆花| 在线成人亚洲| 久久久噜噜噜久噜久久| 日韩视频中文字幕| 欧美精品激情在线| 国内外成人免费激情在线视频| 香港成人在线视频| aa日韩免费精品视频一| 欧美激情亚洲视频| 日韩一级在线观看| 亚洲国产成人精品视频| 久久夜色精品国产噜噜av| 欧美在线关看| 亚洲国产精品va在看黑人| 欧美成人黄色小视频| 久久久综合激的五月天| 久久国产精品久久精品国产| 黄色小说综合网站| 欧美国产日韩在线| 国产精品福利av| 久久精品人人爽| 欧美电影电视剧在线观看| 亚洲午夜黄色| 午夜久久tv| 亚洲精品视频免费观看| 亚洲欧美一区二区视频| 伊人久久久大香线蕉综合直播 | 亚洲一本大道在线| 在线观看亚洲a| 亚洲美女在线一区| 国产欧美日本一区二区三区| 久久网站免费| 国产精品v亚洲精品v日韩精品 | 一本久久a久久免费精品不卡| 欧美日韩一区在线| 欧美成人国产| 国产精品高清网站| 亚洲国产精品久久久|