私はこのようなものを持っています:
class Thing : public QObject {
...
public slots:
void doSomething ();
...
};
次に、次のように、Things を管理するオブジェクトを作成します。
class ManyThings : public QObject {
...
public:
void makeThingDoSomething (int thingIndex);
private:
QVector<Thing *> things_;
...
};
私の質問は次のとおりです。ManyThing のコレクション内のモノは、いくつかの異なるスレッドに散らばっています。Qt::AutoConnection に接続されたシグナルからスロットが呼び出されたかのように、makeThingDoSomething(int) で things_[thingIndex]->doSomething() スロットを呼び出したいと思います。基本的にはこれですが、Thing が呼び出し元とは異なるスレッドにある場合は、Qt のキューイング メカニズムを使用します。
void ManyThings::makeThingDoSomething (int thingIndex) {
// i want to do this AutoConnection style, not direct:
things_[thingIndex]->doSomething();
// doesn't *need* to block for completion
}
これを設定する最も簡単な方法は何ですか? ManyThings で信号を作成し、Thing の各スロットに接続することもできますが、その信号を発信すると、特定の Thing だけでなく、すべての Thing のスロットが呼び出されます。信号に渡されるインデックス パラメータなどに応じて、同じ信号を異なるオブジェクトのスロットに接続できるように、接続を簡単に設定する方法はありますか? または、実際にシグナルを作成することなく、Qt のシグナル/スロット メカニズムを使用してスロットを呼び出す方法はありますか?