【发布时间】:2012-10-09 16:16:37
【问题描述】:
考虑以下情况:
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*) 表示需要更改本地接收器的状态,如果连接排队,语义就是这样我不需要更新发生两次。
【问题讨论】:
标签: qt signals signals-slots slot