2017-08-16 21 views
0

C++からQMLにいくつかのパラメータを渡して、QMLでそれらの処理を行うことができます。C++からQMLへのパラメータの受け渡し

ややこのような:QMLで

void MyClass::myCplusplusFunction(int i, int j) 
{ 
    emit mySignal(i, j); 
} 

mySignal(i, j)が放出されるたびに、私はQML関数を呼び出すとijでものをやりたいです。

Connections { 
    target: myClass 
    // mySignal(i, j) is emitted, call myQmlFunction(i,j) 
} 

どうすればいいですか?

+0

https://stackoverflow.com/questions/8834147/c-signal-to-qml-slot-in-qt –

+2

[QtのQMLスロットへのC++信号の複製](https://stackoverflow.com/questions/8834147/c-signal-to-qml-slot-in-qt) – eyllanesc

+0

@eyllanesc:これは決してリンクされた質問の複製。それはちょうど関連している。リンクした質問では、OPはC++側で接続を確立しようとします。この質問は、QML側での接続についてです。 – derM

答えて

1

はあなたがCPP側に信号があるとしましょう:

void yourSignal(int i, QString t) 

あなたは2つのオプションがあります。

  • をクラスをqml型として登録し、それをqmlオブジェクトとして使用します。オブジェクトはQML側から初期化されます。 reference

    その後

    qmlRegisterType<ClassNameCPP>("com.mycompany.qmlName", 1, 0, "ClassNameQml");

、QMLで:

import QtQuick 2.9 
import com.mycompany.qmlName 1.0 

Item{ 
    ClassNameQml{ 
     id: myQmlClass 
     onYourSignal: { 
      console.log(i,t); // Do whatever in qml side 
     } 
    } 
} 
  • はQML変数として、あなたのクラスを追加します。このオプションは、オブジェクトを何回か再利用する必要がある場合に適しています。 reference:QMLで

    view.rootContext()->setContextProperty("varName", &cppObject);

    その後

、:

import QtQuick 2.9 
Item{ 
    Connections{ 
     target: varName 
     // In QML for each signal you have a handler in the form "onSignalName" 
     onYourSignal:{ 
      // the arguments passed are implicitly available, named as defined in the signal 
      // If you don't know the names, you can access them with "arguments[index]" 
      console.log(i,t); // Do whatever in qml side 
     } 
    } 
} 
+0

QMLコードを追加しました。ドン・ジョーが求めているのは、この2つの可能な風景を使って、正確に答えたと思います。 – albertTaberner

+0

今、それは正しいことだと思います。特に私はOPが再びそれを受け入れるように見えるとは思えないので、私から+1してください。あなたのコードに2つのコメントを追加して、もう少し説明を加えました。 – derM

0

あなたがここに全体のドキュメントを見つけることができます。

http://doc.qt.io/qt-4.8/qtbinding.html

+0

ありがとうございます、ありがとうございます。 –

+1

リンクが死んでしまう可能性があるので(特に古いQt4.8のドキュメントを指しているように)、回答に関連するすべての詳細が含まれるように答えを広げることができれば、質問。リンクは*追加*としてのみ考慮されるべきです。 – derM

関連する問題