考虑以下情况:
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);
}
如何确保只有一个信号到达do_something_heavy()
呼叫?
我希望能够使用set_A()
和调用do_something_heavy()
,但是在调用 set_A 和 set_B 的情况下,我不想do_something_heavy()
两次。
我可以为那个特定的发送者/接收者对取消所有剩余的未完成信号的队列吗?最好在emit
,而不是在接收,但这只是为了简洁和封装 - 我希望updated(Foo*)
表示需要更改本地接收器的状态,如果连接排队,语义是这样的,我不需要更新发生两次。