2016-09-09 6 views
0

QMLスロットにパラメータとしてQMLに登録されたC++型を使用したいと思います。QMLスロットにカスタムQt C++タイプを使用するには?

emit newMessage(myString); 

とQMLスロット:

onNewMessage: { 
    console.log(myString); 
} 

は今、私はこのスロットのパラメータとしてQMLに登録C++タイプを渡したいので、私はすでにC++ QStringの型パラメータを持つ信号を持っています。 私はsimilar questionを見つけましたが、私はこれをどうやって使うことができるのか分かりません。どんな助けも役に立つでしょう。

答えて

0

だから、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); } 
    }; 

あなたはQObjectをベース型ではMyClassと呼ばれるC++のタイプを持っている、とあなたは成功しQMLで次に

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

をした場合、あなたがしなければならないすべてはこれです:

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) 

       } 
     } 
    } 

要約:

QML engで登録されている限り、QObjectから派生したオブジェクトを送信することができます実際のオブジェクトとしては、QMLの他のタイプのように扱うだけです。

希望すると、

関連する問題