かなり精巧な計算の出力を表示する単純な GUI のケースを考えてみましょう。
QMLを使用して素敵なカスタム GUI を書きたいと思います。また、バックグラウンド アプリをQT C++
で作成したいと考えています。
私は QT ドキュメントの前に座っていて、
1) QML アプリケーションを作成し、何らかの形で C++ クラスをその中に埋め込む必要があるか (これは絶対に可能です)、それとも
2) C++ アプリケーション
を作成し、何らかの方法で QML を埋め込む必要があるかどうかを考えています。その中のGUIと私のクラスからQMLプロパティを変更します(これも可能です)
GUI 用の QT ウィジェットを使用して、C++ ですべてを既に作成しています。GUI へのインターフェイスを書き直そうとしても、GUI を QML に移動し、C++ クラスを維持したいだけです。
考えられる答え:
以下のマークされた解決策は、C++ クラスを維持し、SIGNALS と SLOTS を介して排他的に GUI をインターフェースすることを提案しました。したがって、基本的には、メインのワーキング クラスをインスタンス化し、QML GUI を次のように表示する main.cpp になりました。
QQuickView viewer;
viewer.setSource(QUrl("./qml/main.qml"));
viewer.show();
次に、myClass を追加して、接続を行うためのオブジェクトを取得しました。
MyClass myClass;
QQuickItem* item = viewer.rootObject();
QObject::connect(item, SIGNAL(buttonClicked()), &myClass, SLOT(mySlot()));
QObject::connect(&myClass, SIGNAL(mySignal(QVariant)), item, SLOT(updateGUI(QVariant)));
C++ クラスでスロットとシグナルを実装する場合、QVariant オブジェクトを使用してデータを転送する必要があります。次に、QML ファイルは、クリックされたボタンなどの SIGNALS と、表示するデータを受け取るための SLOTS を実装します。
これはまさに私が望んでいたものです。非 GUI コードへの唯一の変更は、シグナルとスロットを介してすべての対話を行うことでした。アプリケーションで両方の GUI (QML / ウィジェット) を使用できるようになりました。