2009-10-14 4 views
6

QSignalMapperを使用して、接続に基づいて異なるパラメータを持つスロットを呼び出すことができます。私が達成したいことは少し異なります。Qtマップ値に基づく信号

私たちはアプリケーションでプラグインを使用しています。さまざまなプラグインがさまざまなタイプのオブジェクトを担当しています。私たちは、それぞれ異なるプラグインで実装された複数のスロットを、メインアプリケーションが発信する1つの信号に接続しています。信号のパラメータの1つは、信号に関連するオブジェクトのタイプを示すQStringです。現在、スロット内でこのパラメータをチェックしており、プラグインによって型が処理されている場合は処理を進めます。これには欠点があります。すべてのプラグインがこのチェックを行い、可能ならばこれを避けたいのです。

すべてのスロットを同じ信号に接続したい場合は、QString引数の値(QSignalMapperなど)の値に応じて、適切なスロットだけが呼び出されます。

これを行うための組み込みのメカニズムはありますか?そうでない場合は、どのように私はこれを達成することができますか?

ありがとうございます。

答えて

3

私はそのための部品がないと思うが、あなたはこのような独自の信号マッパを作成することができます。メインの信号を設定するaddSourceSignal方法MySignalMapperコンポーネント

  • コードを作成

    1. app
    2. コードQString /スロットのペアを取り、その文字列をスロットにマッピングするaddDestinationSlotメソッド。コンポーネント内の
    3. は、ソース信号をqstring値に基づいて送出するカスタムスロットに接続します。 QMetaObject :: invokeMethodでスロットを呼び出すことができます。
  • 0

    "type"文字列の許容値を有効なC++関数名に制限することができます。プラグインが処理するタイプに応じてスロットに名前を付けるように強制すると、プラグインごとに適切な名前のスロットに接続しようとします。

    つまり、独自の命名規則を実装する以外は、QMetaObject::connectSlotsByNameを実行できます。

    関連する問題