Qt当勾选第一个QCheckBox时第二个QCheckBox不勾选,当勾选第二个QCheckBox时第一个QCheckBox不勾选
时间: 2024-11-23 09:39:29 浏览: 11
在Qt中,为了实现这种功能,你可以使用`QObject::connect()`连接两个`QCheckBox`的`toggled`信号到各自处理函数,然后在处理函数中互斥地改变对方的状态。这里有一个简单的示例:
```cpp
#include <QApplication>
#include <QWidget>
#include <QCheckBox>
#include <QThread>
class CheckBoxController : public QObject
{
Q_OBJECT
public slots:
void toggleFirstCheckbox();
void toggleSecondCheckbox();
private:
QCheckBox *firstCheckbox;
QCheckBox *secondCheckbox;
};
void CheckBoxController::toggleFirstCheckbox()
{
if (!secondCheckbox->isChecked()) {
firstCheckbox->setChecked(true);
secondCheckbox->setChecked(false);
} else {
firstCheckbox->setChecked(false);
}
}
void CheckBoxController::toggleSecondCheckbox()
{
if (!firstCheckbox->isChecked()) {
secondCheckbox->setChecked(true);
firstCheckbox->setChecked(false);
} else {
secondCheckbox->setChecked(false);
}
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWidget window;
QVBoxLayout layout(&window);
layout.setContentsMargins(0, 0, 0, 0);
CheckBoxController controller;
firstCheckbox = new QCheckBox("First");
firstCheckbox->connect(firstCheckbox, &QCheckBox::toggled, &controller, &CheckBoxController::toggleFirstCheckbox);
layout.addWidget(firstCheckbox);
secondCheckbox = new QCheckBox("Second");
secondCheckbox->connect(secondCheckbox, &QCheckBox::toggled, &controller, &CheckBoxController::toggleSecondCheckbox);
layout.addWidget(secondCheckbox);
window.show();
return app.exec();
}
```
在这个例子中,当一个`QCheckBox`被切换时,相应的槽函数会被调用,检查另一个`QCheckBox`是否已选中。如果未选中,则切换当前框;若已被选中,则保持原状态。
阅读全文