簡體   English   中英

如何在QML插槽中使用自定義Qt C ++類型?

[英]How to use a custom Qt C++ type with a QML slot?

我想將在QML中注冊的C ++類型用作QML插槽中的參數。 所以我已經有了具有QString類型參數的C ++信號:

emit newMessage(myString);

和QML插槽:

onNewMessage: {
    console.log(myString);
}

現在,我想將在QML中注冊的C ++類型作為此插槽的參數。 我發現了類似的問題 ,但我不知道如何使用反之亦然。 任何幫助將是有用的。

因此,假設您想通過信號/插槽設置將QObject派生文件從C ++來回傳遞到QML。

  class MyClass : public QObject
  {
      Q_OBJECT
  public:
      explicit MyClass(QObject *parent = 0);


  signals:
      void sendSignal(MyClass* anotherMyClass)
  public slots:
       void  send_signals()  {   emit sendSignal(this); }
  };

如果您有一個名為MyClass的C ++類型,它是基於QObject的類型,並且您成功完成了

    qmlRegisterType<MyClass>("com.myapp", 1, 0, "MyClass");

然后在QML中,您要做的就是:

  import QtQuick 2.0
  import com.myapp

  Item {
        MyClass {
              id: myInstance
              Component.OnCompleted: {
                  // connect signal to javascript function
                  myInstance.sendSignal.connect( myInstance.receiveSignal);
              }
              function receiveSignal(mySentObject) {
                      // here is your QObject sent via Signal
                      var  receivedObject = mySentObject;

                     // Now to send it back 
                    //  (will cause an endless loop)
                      myInstance.sendSignal(receivedObject);

                     //  or you could do this to perform 
                      // the same endless loop
                     receivedObject.send_signals();

                     //  or you could do this to perform 
                      // the same endless loop
                     receivedObject.sendSignal(myInstance)

               } 
      }
  }

摘要:

您可以發送任何QObject派生的對象,只要它已在QML引擎中注冊為實際對象,就可以像對待QML中的任何其他類型一樣對待它

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM