Fab*_*rer 5 qt signals qobject slot
我想在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;
}
Run Code Online (Sandbox Code Playgroud)
通过断开和重新连接对象是可能的,但首先必须存储信号/时隙列表.似乎自省方法不足够强大来实现这一(我看了看QMetaObject,并QSignalSpy没有成功).
Ole*_*leg 11
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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10987 次 |
| 最近记录: |