2016-10-14 16 views
0

で複数のシグナルとスロットを接続します。は、私がどのようにQtのを使用する自分自身を教えていると私は、私は、ユーザーがフォーム上のコントロールを操作したときのためのシグナル/スロットの数を必要とする点に達したQtの

私は信号とスロットを動作させることに成功しましたが、かなりの数の信号とスロットを接続したいと思います。コードを管理しやすくするため、すべて可能です。エンジンを移動しようと

これまでのところ、私はここに私の主な機能のうち、それらを動かす運がなかったてきた私は、そこから、まだ動作しているようですが、はるかに私を助けない、正常グローバルにオブジェクトを移動したか、アプリましたエラーだけが発生しました。私が別の関数でそれらを接続しようとしたかどうかわかることから、そのような関数が返す2番目の接続が崩壊してしまう。

現在、私はこの作業のように見える何かを持っている:私はちょうどメインにすべてを詰め込むする必要がないように

int main(int argc, char *argv[]) 
    { 
    QGuiApplication app(argc, argv); 

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 
    QObject *object = engine.rootObjects()[0]; 

    controls myClass; 
    QObject::connect(object, SIGNAL(taskComplete(int)), &myClass, SLOT(taskComplete(int))); 

    return app.exec(); 
    } 

は、私がどのようなオプションがありますか?

免責事項:Qtの周りに私の道を見つけ出すことはほとんどありませんでした。私が知りたい間違った木を完全に吠えているなら、私は何をしているのか分かりません。

+0

"免責事項:これまでQtの周りに私の道を見つけ出している幸運はほとんどなく、間違った木を完全に吠えているなら、私は何をしているのか分かりません。 あなたはQtの素晴らしいドキュメントとチュートリアルを勉強し、数週間を費やす必要があります。 –

+0

オハイオ州、私はすべての面で常に役に立つRTFMを投稿することを忘れていました。 質問は非常に具体的で、よく書かれており、良い質問の例よりも些細なものではありません。*入力のすべてが整数の場合、intの代わりにfloatを使用すると、私は異なる結果になるのですか?* – derM

+0

彼は私たちに暴露された問題をOPが解決するのを助けるアドバイスでした。 – GrecKo

答えて

2

、それはQMLの「接続」を処理するためにadvantegousであることが判明しました側。

基本的にはQML、例えば1つのまたは複数のQObject基づいてオブジェクトを公開するでしょう、あなたのC++コードエンジンのルートコンテキストのsetContextProperty()を経由し、QMLコードは必要なときにスロットを呼び出すだけです。

主な理由は、これは例えば、私たちのQMLコードにあまりにも多くの詳細を課さないということです特定の構造、特定の名前や信号を持つ特定のオブジェクトなど C++側では機能が提供され、QML側では必要なときに呼び出します。

+0

申し訳ありませんが、ちょっとした手間がかかっていましたが、このソリューションは間違いなく私のために働いています。 これは私のコードでも他の非効率的な点を修正しました。ありがとう! –

0

あなたはMyCustomQQuickViewと呼ばれるQQuickViewを拡張するクラスを作成することができます。コンストラクタに

、あなたはQMLファイル設定:

setSource(QUrl(QStringLiteral("qrc:/main.qml"))) 

そしてを、あなたはQMLのルートオブジェクトへのアクセス権を持っている方法QQuickView::rootObject()を持っているので、あなたはすべてのあなたの信号を接続することができます。

あなたのメインクラスのコードは次のようになります。物事QMLで起こっおよびC++で処理する必要がある場合には

int main(int argc, char *argv[]) { 
    QGuiApplication app(argc, argv); 

    MyCustomQQuickView view; 
    view.show(); 

    return app.exec(); 
} 
関連する問題

 関連する問題