Qcheckbox 最小一个选项总是在 QT -c++ 中选中
Qcheckbox minimum one option is always checked in QT -c++
我有一个带有 qcheckboxes 的 QT 应用程序。我想实现一个复选框总是被选中,我可以尽可能多地检查,但总是必须选中一个。我该怎么做?
可能有更优雅的方法来做到这一点,但我建议只使用信号。
在某个地方,可能是构造函数,你会连接信号
connect( chkOne, &QCheckBox::toggled, this, &Test::onCheckboxOne );
然后,在您将其连接到的函数中,只需检查是否检查了其他任何内容。为此,我使用了一个名为 total_checked
.
的变量
void Test::onCheckboxOne( bool checked ) {
disconnect( chkOne, &QCheckBox::toggled, this, &Test::onCheckboxOne );
if ( !checked ) {
if ( total_checked == 1 )
this->chkOne->setCheckState( Qt::Checked );
else
--total_checked;
} else {
++total_checked;
}
connect( chkOne, &QCheckBox::toggled, this, &Test::onCheckboxOne );
}
如果你有很多复选框,这将变得不切实际,除非(一旦未选中),你想要一个特定的复选框集,在这种情况下,上面的内容将是所有复选框信号的处理程序。
我有一个带有 qcheckboxes 的 QT 应用程序。我想实现一个复选框总是被选中,我可以尽可能多地检查,但总是必须选中一个。我该怎么做?
可能有更优雅的方法来做到这一点,但我建议只使用信号。
在某个地方,可能是构造函数,你会连接信号
connect( chkOne, &QCheckBox::toggled, this, &Test::onCheckboxOne );
然后,在您将其连接到的函数中,只需检查是否检查了其他任何内容。为此,我使用了一个名为 total_checked
.
void Test::onCheckboxOne( bool checked ) {
disconnect( chkOne, &QCheckBox::toggled, this, &Test::onCheckboxOne );
if ( !checked ) {
if ( total_checked == 1 )
this->chkOne->setCheckState( Qt::Checked );
else
--total_checked;
} else {
++total_checked;
}
connect( chkOne, &QCheckBox::toggled, this, &Test::onCheckboxOne );
}
如果你有很多复选框,这将变得不切实际,除非(一旦未选中),你想要一个特定的复选框集,在这种情况下,上面的内容将是所有复选框信号的处理程序。