Q_INVOKABLE與invokeMethod用法全解


Q_INVOKABLE與invokeMethod用法全解

請尊重原創作品和譯文。轉載請保持文章完整性,並以超鏈接形式注明原始作者地址http://blog.csdn.net/changsheng230,方便其他朋友提問和指正。

 

Qt Quick宏淺議一文中,我們將介紹const char * member,

  • QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument( 0 ), …)  
  •  

     

    invokeMethod 的用法為,嘗試調用對象obj的方法member(注意member可以為信號或者是槽),如何member可以被調用,則返回真,否則返回假。 QMetaObject::invokeMethod可以是異步調用,也可以是同步調用。這取決與它的連接方式Qt::DirectConnection,則為同步調用,若為"methodName",   

  • Q_ARG(type1, arg1),   
  • Q_ARG(type2, arg2));  
  •  

    上述調用為異步調用。請注意,因為上面所示的參數需要被在構建事件時進行硬拷貝,參數的自定義型別所對應的類需要提供一個共有的構造函數、析構函數以及拷貝構造函數。而且必須使用注冊Qt C++/QML混合編程,跨線程編程Qt/ HTML5混合編程以及里廣泛使用。

    Qt元對象系統。考慮在QML中使用Qt 4.7   
  • import Shapes 5.0   //自定義模塊  
  • Item {   
  •     width: 300; height: 200  
  •     Ellipse {   
  •          x: 50; y: 35; width: 200; height: 100   
  •         color: "blue"   
  •          MouseArea {   
  •             anchors.fill: parent  
  •             // 調用C++中定義的randomColor方法   
  •             onClicked: parent.color = parent.randomColor()    
  •         }   
  •     }  
  • }  
  •  

    為了讓上述QML代碼成功的調用下面這段代碼定義的randomColor()函數,最為關鍵的一點見randomColor方法用Q_INVOKABLE 修飾。

    1. #include <QDeclarativeItem >  
    2. class EllipseItem : public QDeclarativeItem   
    3. {   
    4.     Q_OBJECT   
    5. public:  
    6.       Q_INVOKABLE QColor randomColor() const;  
    7.       …  
    8. }  
     

    更多細節,請參看我的另一篇博文:QML與C++混合編程使用

    在跨線程編程中的使用

    我們如何調用駐足在其他線程里的QObject方法呢?事件循環與線程

    Qt服務框架是methodQ_INVOKEBLE來實現

     

    其中,最常見的與servicer交互的方法如下:

    1. QServiceManager manager;QObject *storage ;  
    2. storage = manager.loadInterface("com.nokia.if (storage)     QMetaObject::invokeMethod(storage, "deleteFile", Q_ARG(QString, "/tmp/readme.txt"));  
    上面的代碼通過service的元對象提供的invokeMethod方法,調用文件存儲對象的deleteFile() 方法。客戶端不需要知道對象的類型,因此也沒有鏈接到具體的service庫。  當然在服務端的deleteFile方法,一定要被標記為Q_INVOKEBLE,才能夠被元對象系統識別

    method和property來通信,就像本地對象一樣。服務可以設定為在客戶端間共享,或針對一個客戶端。  請注意,在method僅支持跨線程。 下圖是跨進成的服務/客戶段通信示意圖(圖片來自諾基亞論壇)。這里我們可以清楚的看到,invokable serivceFramework

    有關Qt Service Framework文檔

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM