1. 基本用法
- QCheckBox是用于提供复选框功能的控件,允许用户选择或取消选择选项。
#include <QCheckBox>
// 创建复选框
QCheckBox *checkBox = new QCheckBox("Enable Feature", this);
checkBox->setChecked(true); // 默认选中
2. 主要属性
bool isChecked = checkBox->isChecked();
checkBox->setChecked(false);
- tristate: 是否支持三态(选中/未选中/部分选中)。
checkBox->setTristate(true); // 启用三态
- checkState: 获取或设置当前状态(Qt::Checked, Qt::Unchecked, Qt::PartiallyChecked)。
Qt::CheckState state = checkBox->checkState();
checkBox->setCheckState(Qt::PartiallyChecked);
- text / icon: 设置复选框显示的文本或图标。
checkBox->setText("Advanced Mode");
checkBox->setIcon(QIcon(":/icons/advanced.png"));
3. 信号与槽
- stateChanged(int state)
- 当复选框状态(Qt::CheckState)改变时触发,适用于三态复选框。
connect(checkBox, &QCheckBox::stateChanged, [](int state) {
qDebug() << "New state:" << state;
});
- toggled(bool checked)
- 当复选框的布尔状态(选中/未选中)改变时触发。
connect(checkBox, &QCheckBox::toggled, [](bool checked) {
qDebug() << "Checked:" << checked;
});
4. 样式设置
checkBox->setStyleSheet(
"QCheckBox::indicator { width: 20px; height: 20px; }"
"QCheckBox::indicator:checked { background-color: green; }"
"QCheckBox::indicator:indeterminate { background-color: yellow; }"
);
- 布局调整
- 通过setLayoutDirection()调整文本与复选框的位置:
checkBox->setLayoutDirection(Qt::RightToLeft); // 文本在左侧
5. 高级功能
- 动态创建与分组
- 多个复选框可组合使用,实现多选逻辑:
QVBoxLayout *layout = new QVBoxLayout;
for (const QString &option : {"Option 1", "Option 2", "Option 3"}) {
QCheckBox *box = new QCheckBox(option);
layout->addWidget(box);
}
- 三态逻辑处理
- 适用于需要表示“部分选中”的场景(如树形列表的父节点):
checkBox->setTristate(true);
checkBox->setCheckState(Qt::PartiallyChecked);
6. 注意事项
与QRadioButton区别
- QCheckBox允许多选,而QRadioButton用于单选(需配合QButtonGroup)。
性能优化
无障碍支持
- 通过setAccessibleName()和setAccessibleDescription()提升无障碍体验。
7. 示例代码
// 创建复选框并处理状态
QCheckBox *checkBox = new QCheckBox("Accept License Agreement", this);
checkBox->setTristate(false);
connect(checkBox, &QCheckBox::stateChanged, [this](int state) {
if (state == Qt::Checked) {
enableNextButton(true);
} else {
showWarning("You must accept the agreement to proceed.");
}
});
总结
- QCheckBox是Qt中用于实现多选功能的核心控件,支持基础选中、三态逻辑及高度自定义样式。通过合理使用信号与槽,可以轻松实现复杂的交互逻辑。