6

QSignalMapper接続に基づいてさまざまなパラメーターでスロットを呼び出すために使用できることを知っています。私が達成したいことは少し異なります。

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

すべてのスロットを同じシグナルに接続したいのですが、シグナルが送信されると、QString引数の値に応じて適切なスロットのみが呼び出されQSignalMapperます。

これを行う組み込みのメカニズムはありますか?そうでない場合、これを達成する方法についてのアイデアはありますか?

前もって感謝します。

4

3 に答える 3

3

そのためのコンポーネントはないと思いますが、次のような独自のシグナルマッパーを作成できます。

  1. MySignalMapperコンポーネントを作成します
  2. addSourceSignalメソッドをコーディングして、メインアプリのシグナルを設定します
  3. QString / slotペアを取り、文字列をスロットにマップするaddDestinationSlotメソッドをコーディングします。
  4. コンポーネントで、ソース信号をqstring値に基づいてディスパッチするカスタムスロットに接続します。QMetaObject::invokeMethodを使用してスロットを呼び出すことができます。
于 2009-10-14T13:13:48.450 に答える
1

Qxt には、まさにこの機能のためのクラスがあります。QxtCore モジュールにある QxtSlotMapper クラスを使用できます。

http://libqxt.bitbucket.org/doc/tip/qxtslotmapper.html

于 2014-03-10T09:13:34.917 に答える
0

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

言い換えれば、QMetaObject::connectSlotsByName独自の命名規則を実装することを除いて、何をすることができます。

于 2009-10-15T07:49:03.803 に答える