我想一般性地暂时阻止两个之间的信号QObjects
不修改其他信号/槽的行为,也不知道它们的上下文。
就像是QObject::blockSignals(布尔) http://qt-project.org/doc/qt-4.8/qobject.html#blockSignals,但只作用于两者之间QObjects
.
也就是说,实现以下SignalBlocker::blockSignals(bool)
功能:
class SignalBlocker {
public:
SignalBlocker(QObject *sender, QObject *receiver) :
mSender(sender), mReceiver(receiver) {}
void blockSignals(bool block);
private:
QObject *mSender, *mReceiver;
}
可以通过断开并重新连接对象来实现,但首先必须存储信号/槽列表。
内省方法似乎不足以实现这一目标(我查看了QMetaObject
and 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;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)