Qt QRadioButton & QCheckBox
Qt QRadioButton & QCheckBox 笔记
1. QRadioButton 单选框
父类:
QAbstractButton
特点:同一组内,同一时间只能选中一个;互斥选择。
常用API
// 构造函数
QRadioButton(const QString &text, QWidget *parent = nullptr);
QRadioButton(QWidget *parent = nullptr);
// 设置是否选中
void setChecked(bool ok);
// 判断是否被选中
bool isChecked() const;
// 设置显示文字
void setText(const QString &text);
核心信号
clicked(bool checked):点击触发,带选中状态参数toggled(bool checked):选中状态发生切换时触发stateChanged(int state):状态改变,参数是Qt::CheckState枚举
💡UI自动生成槽函数:
on_控件名_clicked()/on_控件名_stateChanged(int arg1),不需要手动写connect。
代码示例
// 设置默认选中
ui->radioButton_6->setChecked(true);
// UI自动槽函数示例
void MainWindow::on_radioButton_7_clicked()
{
qDebug() << "996";
}
void MainWindow::on_radioButton_5_clicked(bool checked)
{
qDebug() << "前台小姐姐不好看!!!";
}
常见坑
- 窗口控件显示不全:最外层centralwidget没有布局,需要给中心部件设置布局,否则控件会被遮挡。
- 互斥范围:放在同一个父窗口下的RadioButton默认互斥;如果需要多组单选,要用
QButtonGroup分组。
2. QCheckBox 复选框
父类:
QAbstractButton
特点:可以多选;支持三态模式(未选中 / 部分选中 / 完全选中)
常用API
// 构造
QCheckBox(const QString &text, QWidget *parent = nullptr);
QCheckBox(QWidget *parent = nullptr);
// 设置是否三态(半选中状态)
void setTristate(bool y = true);
bool isTristate() const;
// 设置复选框状态
void setCheckState(Qt::CheckState state);
// 获取状态
Qt::CheckState checkState() const;
Qt::CheckState枚举
| 枚举值 | 含义 |
|---|---|
Qt::Unchecked |
未选中 |
Qt::PartiallyChecked |
半选中(三态模式,部分子项选中) |
Qt::Checked |
完全选中 |
核心信号
stateChanged(int state):复选框状态发生改变时触发,参数为Qt::CheckState枚举值。
示例:父子复选框联动(三态)
// 开启根复选框三态
ui->wives->setTristate(true);
//多个子复选框绑定同一个槽函数
connect(ui->jianning,&QCheckBox::stateChanged,this,&MainWindow::statusChanged);
connect(ui->fangyi,&QCheckBox::stateChanged,this,&MainWindow::statusChanged);
// 槽函数,统计勾选数量,更新父复选框状态
void MainWindow::statusChanged(int state)
{
if(state == Qt::Checked)
{
m_number++;
}
else
{
m_number--;
}
if(m_number == 7)
{
ui->wives->setCheckState(Qt::Checked);
}
else if(m_number == 0)
{
ui->wives->setCheckState(Qt::Unchecked);
}
else
{
// 部分选中
ui->wives->setCheckState(Qt::PartiallyChecked);
}
}
//批量勾选/取消所有子复选框
if(bl)
{
ui->jianning->setChecked(true);
ui->fangyi->setChecked(true);
}
else
{
ui->jianning->setChecked(false);
ui->fangyi->setChecked(false);
}
3. QRadioButton 和 QCheckBox对比
| 控件 | 特性 | 使用场景 |
|---|---|---|
QRadioButton |
单选、互斥,只有两种状态:选中/未选中 | 多选一,性别、选项互斥场景 |
QCheckBox |
复选,允许多选;支持三态半选中 | 多选多,勾选多个选项,树形父子联动 |
两者都继承自
QAbstractButton,所以setText()、isChecked()等基础API通用。
补充知识点
- UI自动槽函数命名规则:
on_控件名_信号名(参数),无需手写connect。 stateChanged参数是int,要和Qt::CheckState枚举做对比判断。- 使用三态复选框,必须调用
setTristate(true)开启,否则没有半选中效果。 - 窗口控件显示不全:一定给
centralwidget设置顶层布局。
浙公网安备 33010602011771号