🐌博主主页:🐌倔强的大蜗牛🐌
📚专栏分类:QT
❤️感谢大家点赞👍收藏⭐评论✍️
一、Radio Buttion
介绍
QRadioButton 是单选按钮. 可以让我们在多个选项中选择一个.
属性
QAbstractButton 中和 QRadioButton 关系较大的属性
属性 | 说明 |
---|---|
checkable | 是否能选中 |
checked | 是否已经被选中. checkable 是 checked 的前提条件. |
autoExclusive | 是否排他. 选中⼀个按钮之后是否会取消其他按钮的选中. 对于 QRadioButton 来说默认就是排他的. |
代码示例: 选择水果
- 在界面上创建一个 label, 和 3 个 单选按钮
设置的文本如下图. 3 个单选按钮的 objectName 分别为 radioButton_apple ,
radioButton_watermelon , radioButton_banana
- 修改 widget.cpp, 编辑三个 QRadioButton 的 slot 函数.
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_radioButton_apple_clicked()
{
//把界面上的label的内容进行更新
ui->label->setText("你选择的水果是:苹果");
}
void Widget::on_radioButton_watermelon_clicked()
{
//把界面上的label的内容进行更新
ui->label->setText("你选择的水果是:西瓜");
}
void Widget::on_radioButton_banana_clicked()
{
//把界面上的label的内容进行更新
ui->label->setText("你选择的水果是:香蕉");
}
- 运行程序, 可以看到随着选择不同的单选按钮, label 中的提示文字就会随之变化.
- 当前代码中, 如果程序启动, 则不会选择任何选项.
可以修改代码, 让程序启动默认选中苹果
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 设置默认选中该按钮
ui->radioButton_apple->setChecked(true);
ui->label->setText("你选择的水果为: 苹果");
}
此时运行程序, 即可看到 水果苹果 已经被选中了.
- 当前代码中, 也可以禁用 “香蕉” 被选中.
修改 widget.cpp 的构造函数
// 禁⽤香蕉选项
ui->radioButton_banana->setEnabled(false);
代码示例: click, press, release, toggled 的区别
- clicked 表示一次 “点击”.
- pressed 表示鼠标 “按下”.
- released 表示鼠标 “释放”.
- toggled 表示按钮状态切换.
- 在界面上创建四个单选按钮
objectName 分别为 radioButton , radioButton_2 , radioButton_3 ,radioButton_4
- 给 1 创建 clicked 槽函数, 给 2 创建 pressed 槽函数, 给 3 创建 released 槽函数,
给 4 创建 toggled 槽函数.
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_radioButton_clicked(bool checked)
{
qDebug() << "clicked"<< checked;
}
void Widget::on_radioButton_2_pressed()
{
qDebug() << "pressed";
}
void Widget::on_radioButton_3_released()
{
qDebug() << "released";
}
void Widget::on_radioButton_4_toggled(bool checked)
{
//checked状态发生改变,就会触发这个信号
if (checked) {
qDebug() << "toggled checked true";
} else {
qDebug() << "toggled checked false";
}
}
- 运行程序, 可以看到
• clicked 是一次鼠标按下+鼠标释放触发的.
• pressed 是鼠标按下触发的.
• released 是鼠标释放触发的.
• toggled 是 checked 属性改变时触发的.
总的来说, toggled 是最适合 QRadioButton 的.
代码示例: 单选框分组
- 在界面上创建 6 个单选框, 用来模拟买水果的界面.
objectName 分别为 radioButton 到 radioButton_6
此时直接运行程序, 可以看到, 这六个 QRadioButton 之间都是排他的.
我们希望每一组内部来控制排他, 但是组和组之间不能排他. - 引入 QButtonGroup 进行分组.
修改 widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QButtonGroup>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//使用QButtonGroup 对单选按钮进行分组
QButtonGroup*group1 =new QButtonGroup(this);
QButtonGroup*group2 =new QButtonGroup(this);
QButtonGroup*group3 =new QButtonGroup(this);
// 把 QRadioButton 两两⼀组, 放到三个 QButtonGroup 中
group1->addButton(ui->radioButton);
group1->addButton(ui->radioButton_2);
group2->addButton(ui->radioButton_3);
group2->addButton(ui->radioButton_4);
group3->addButton(ui->radioButton_5);
group3->addButton(ui->radioButton_6);
}
Widget::~Widget()
{
delete ui;
}
再次执行程序, 可以看到可以按照正确的分组方式来完成排他了.
❤️结语:
本次精彩内容已圆满结束!希望各位读者在阅读过程中能够收获满满。在此,特别感谢各位读者的支持与三连赞。如果文章中存在任何问题或不足之处,欢迎在评论区留言,蜗牛必定会认真对待并加以改进,以便为大家呈现更优质的文章。你们的支持与鼓励,将是博主不断前进的最大动力。再次感谢大家的陪伴与支持!