Pixiv - KiraraShss
539 字
3 分钟
QT的QCheckBox用法
在 Qt 中,QCheckBox 的 stateChanged 信号使用方式如下:
基本用法
// 连接 stateChanged 信号connect(ui->checkBox, &QCheckBox::stateChanged, this, &MyClass::onCheckBoxStateChanged);
// 槽函数实现void MyClass::onCheckBoxStateChanged(int state){ if (state == Qt::Checked) { qDebug() << "Checkbox is checked"; } else if (state == Qt::Unchecked) { qDebug() << "Checkbox is unchecked"; } // 对于三态复选框,还可能有 Qt::PartiallyChecked}使用枚举提高可读性
void MyClass::onCheckBoxStateChanged(int state){ switch (state) { case Qt::Unchecked: qDebug() << "未选中"; break; case Qt::PartiallyChecked: qDebug() << "部分选中"; break; case Qt::Checked: qDebug() << "选中"; break; }}Lambda 表达式方式
connect(ui->checkBox, &QCheckBox::stateChanged, [this](int state) { if (state == Qt::Checked) { // 选中时的处理 enableFeature(); } else { // 未选中时的处理 disableFeature(); }});完整示例
class MainWindow : public QMainWindow{ Q_OBJECT
public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { checkbox = new QCheckBox("启用功能", this); checkbox->setTristate(true); // 启用三态
// 连接信号 connect(checkbox, &QCheckBox::stateChanged, this, &MainWindow::onCheckboxStateChanged); }
private slots: void onCheckboxStateChanged(int state) { qDebug() << "状态改变:" << state;
switch (state) { case Qt::Unchecked: statusLabel->setText("功能已禁用"); break; case Qt::PartiallyChecked: statusLabel->setText("功能部分启用"); break; case Qt::Checked: statusLabel->setText("功能已启用"); break; } }
private: QCheckBox *checkbox; QLabel *statusLabel;};直接赋值改变值
可以直接通过代码改变复选框的值,有多种方式:
1. 使用 setCheckState() - 推荐
// 设置选中状态(会触发 stateChanged 信号)ui->checkBox->setCheckState(Qt::Checked); // 选中ui->checkBox->setCheckState(Qt::Unchecked); // 未选中ui->checkBox->setCheckState(Qt::PartiallyChecked); // 部分选中(三态)2. 使用 setChecked() - 仅用于二态
// 设置选中/未选中(会触发 stateChanged 和 toggled 信号)ui->checkBox->setChecked(true); // 选中ui->checkBox->setChecked(false); // 未选中3. 临时阻塞信号
如果不想在设置值时触发信号:
// 临时阻塞信号,设置值后再恢复ui->checkBox->blockSignals(true); // 阻塞信号ui->checkBox->setCheckState(Qt::Checked);ui->checkBox->blockSignals(false); // 恢复信号完整示例
// 情况1:完全不连接信号QCheckBox *checkbox1 = new QCheckBox("选项1");checkbox1->setCheckState(Qt::Checked); // 直接设置,无信号处理
// 情况2:连接信号但只用于特定操作QCheckBox *checkbox2 = new QCheckBox("选项2");connect(checkbox2, &QCheckBox::stateChanged, [](int state) { // 只记录日志,不做复杂处理 qDebug() << "状态改变:" << state;});
// 情况3:通过代码批量设置多个复选框void setAllCheckboxes(bool checked){ // 临时阻塞所有信号 ui->checkBox1->blockSignals(true); ui->checkBox2->blockSignals(true); ui->checkBox3->blockSignals(true);
// 设置值 ui->checkBox1->setChecked(checked); ui->checkBox2->setChecked(checked); ui->checkBox3->setChecked(checked);
// 恢复信号 ui->checkBox1->blockSignals(false); ui->checkBox2->blockSignals(false); ui->checkBox3->blockSignals(false);
// 手动触发一次统一的处理 onCheckboxesChanged();}支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
QT的QCheckBox用法
https://blog.vanilla.net.cn/posts/qt的qcheckbox用法/ 最后更新于 2025-02-02,距今已过 372 天
部分内容可能已过时