我想一般性地暂时阻止两个 QObjects
之间的信号。无需修改其他信号/槽的行为,并且不知道它们的上下文。
像 QObject::blockSignals(bool) , 但只在两个 QObjects
之间起作用.
也就是执行下面的SignalBlocker::blockSignals(bool)
功能:
class SignalBlocker {
public:
SignalBlocker(QObject *sender, QObject *receiver) :
mSender(sender), mReceiver(receiver) {}
void blockSignals(bool block);
private:
QObject *mSender, *mReceiver;
}
可以通过断开和重新连接对象来实现,但首先必须存储信号/插槽列表。
自省(introspection)方法似乎不够强大,无法实现这一点(我查看了
QMetaObject
和 QSignalSpy
没有成功)。
最佳答案
QT 无法仅禁用信号槽对。试试这个解决方法:
struct SignalDisabler
{
SignalDisabler(const QObject *sender, const char *signal, const QObject *receiver, const char *member)
: sender(sender)
, signal(signal)
, receiver(receiver)
, member(member)
{
QObject::disconnect(sender, signal, receiver, member);
}
~SignalDisabler()
{
QObject::connect(sender, signal, receiver, member);
}
const QObject *sender;
const char *signal;
const QObject *receiver;
const char *member;
};
关于qt - 临时阻塞两个 QObject 之间的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633086/