gpt4 book ai didi

qt - 临时阻塞两个 QObject 之间的信号

转载 作者:行者123 更新时间:2023-12-04 16:46:23 30 4
gpt4 key购买 nike

我想一般性地暂时阻止两个 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)方法似乎不够强大,无法实现这一点(我查看了 QMetaObjectQSignalSpy 没有成功)。

最佳答案

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com