gpt4 book ai didi

Qt 强制 QCheckBox 在 setChecked 上发出信号

转载 作者:行者123 更新时间:2023-12-03 20:26:39 25 4
gpt4 key购买 nike

如果我调用 QCheckBox::setChecked( x ) toggled仅在 x 时才发出信号与当前的复选框状态不同。我理解这背后的逻辑,以避免在没有任何改变的情况下发出信号。但是,在某些情况下,我有一个更复杂的小部件设置,我需要始终发出信号。这确保任何连接到复选框的人都将收到第一个状态。

有没有办法拥有QCheckBox::setChecked(bool)不管状态是否改变都发出信号?

我现在的简单解决方法是通过执行 setChecked(!x) 来强制复选框进入多个状态。和 setChecked(x) .我希望有一种更正确的方法来做到这一点。

最佳答案

调查 QAbstractButton实现,我发现以下代码行:

if (!d->checkable || d->checked == checked) {
if (!d->blockRefresh)
checkStateSet();
return;
}

在哪里 checkStateSet是一个虚函数。 QCheckBox 覆盖它并发出 stateChanged()仅当状态改变时才发出信号。
我没有测试过这个,但我认为 d->blockRefresh设置为 false如果您调用 QCheckBox::setChecked( ... )直接地。

如果是这种情况,则意味着您可以继承 QCheckBox并覆盖 checkStateSet()方法是这样的:
void MyCheckBox::checkStateSet()
{
QCheckBox::checkStateSet();
if( m_oldState == checkState() )
{
// emit the signal here, as QCheckBox::checkStateSet() didn't do it.
emit stateChanged( m_oldState );
}
else
{
// don't emit the signal as it has been emitted already,
// but save the old state
m_oldState = checkState();
}
}

头文件包含在哪里
private:
Qt::CheckState m_oldState;

必须初始化为 Qt::Unchecked在构造函数中。

关于Qt 强制 QCheckBox 在 setChecked 上发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7257912/

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