• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
sn-genuine
博客园    首页    新随笔    联系   管理    订阅  订阅

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);

核心信号

  1. clicked(bool checked):点击触发,带选中状态参数
  2. toggled(bool checked):选中状态发生切换时触发
  3. 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通用。

补充知识点

  1. UI自动槽函数命名规则:on_控件名_信号名(参数),无需手写connect。
  2. stateChanged参数是int,要和Qt::CheckState枚举做对比判断。
  3. 使用三态复选框,必须调用setTristate(true)开启,否则没有半选中效果。
  4. 窗口控件显示不全:一定给centralwidget设置顶层布局。
posted on 2026-09-05 16:29  SobNov  阅读(4)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3