次の状況を考慮してください。
class Foo : public QObject {
Q_OBJECT
public:
void set_A(int a) { emit updated(this); }
void set_B(int b) { emit updated(this); }
signals:
void updated(Foo*);
}
Foo f;
connect(&f, SIGNAL(updated(Foo*)), something, SLOT(do_something_heavy(Foo*)), Qt::QueuedConnection)
void bar() {
f.set_A(5); f.set_B(6);
}
信号の 1 つだけが通話に到達するようにするにはどうすればよいdo_something_heavy()
ですか?
set_A()
を使用して呼び出すことができるようにしたいのですdo_something_heavy()
が、set_A と set_B の両方が呼び出される場合、2 回はしたくありませんdo_something_heavy()
。
その特定の送信者/受信者のペアの残りの未処理の信号をすべてアンキューできますか? できれemit
ば受信時ではなく で、しかしそれは簡潔さとカプセル化のupdated(Foo*)
ためです。更新が 2 回発生します。