当前位置: 首页 > news >正文

Qt常用控件——QRadioButton和QCheckBox

文章目录

    • QRadioButton
    • QAbstractButton信号
    • 实现简单的点餐页面
    • QCheckBox

QRadioButton

QRadioButton是单选按钮,可以让我们在多个选项当中选择一个

作为QAbstractButtonQWidget的子类,它们的属性和语法,对于QRadioButton同样适用

QAbstractButton中和QRadioButton关联较大的属性

属性说明
checkable是否能被使用
checked是否已经被选择(checkable是check的前提条件)
autoExclusive是否排他
选中一个按钮之后,是否会取消其他按钮的选中
对于QRadioButton来说,默认排他的(单选)
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//添加默认选项ui->radioButton_other->setChecked(true);ui->label->setText("您的性别为: ?");
}Widget::~Widget()
{delete ui;
}void Widget::on_radioButton_male_clicked()
{ui->label->setText("您的性别为: 男");
}void Widget::on_radioButton_female_clicked()
{ui->label->setText("您的性别为: 女");
}void Widget::on_radioButton_other_clicked()
{ui->label->setText("您的性别为: 其他");}

这里可以看到QRadioButton默认是排他的,单选

image-20240909200830421

禁用选项:

想要禁用某个按钮,可以用setCheckable(false)

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//添加默认选项ui->radioButton_other->setChecked(true);ui->label->setText("您的性别为: ?");//禁用ui->radioButton_disable->setCheckable(false);
}Widget::~Widget()
{delete ui;
}void Widget::on_radioButton_male_clicked()
{ui->label->setText("您的性别为: 男");
}void Widget::on_radioButton_female_clicked()
{ui->label->setText("您的性别为: 女");
}void Widget::on_radioButton_other_clicked()
{ui->label->setText("您的性别为: 其他");}void Widget::on_radioButton_disable_clicked()
{ui->label->setText("error");
}

这里虽然不可选中,但是还是触发了点击事件。

这是因为checkable只能够让按钮不被选中,但还是可以响应点击事件

GIF 2024-9-9 20-18-00

可以采用setEnabled或者setDisabled

ui->radioButton_disable->setDisabled(true);
//ui->radioButton_disable->setEnabled(false);

image-20240909202201705

QAbstractButton信号

image-20240909202612422

  • clicked:之前大多数用的都是cicked()信号,表示一次点击事件(等于一次pressed + released
  • clicked(bool):参数的bool,表示是否被选中
  • pressed():鼠标按下
  • released():鼠标释放
  • toggled(bool):切换的时候会触发
void Widget::on_radioButton_clicked(bool checked)
{//checked表示当前radioButton的选中状态qDebug() << "clicked: " << checked;
}void Widget::on_radioButton_4_pressed()
{qDebug() << "pressd";
}void Widget::on_radioButton_2_released()
{qDebug() << "released";
}void Widget::on_radioButton_3_toggled(bool checked)
{//checked状态发生改变,就会触发这个信号qDebug() << "toggled: " << checked;
}

GIF 2024-9-9 20-37-33

实现简单的点餐页面

image-20240909211700084

这里分为三组,需要选择三个,但是radioButton默认是排他的,所有我们可以分组,采用QButtonGroup针对单选按钮进行分组

#include "widget.h"
#include "ui_widget.h"
#include<QButtonGroup>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//进行分组QButtonGroup *group1 = new QButtonGroup(this);QButtonGroup *group2 = new QButtonGroup(this);QButtonGroup *group3 = new QButtonGroup(this);//将按钮放入不同组里group1->addButton(ui->radioButton);group1->addButton(ui->radioButton_2);group1->addButton(ui->radioButton_3);group1->addButton(ui->radioButton_4);group2->addButton(ui->radioButton_5);group2->addButton(ui->radioButton_6);group2->addButton(ui->radioButton_7);group2->addButton(ui->radioButton_8);group3->addButton(ui->radioButton_9);group3->addButton(ui->radioButton_10);group3->addButton(ui->radioButton_11);group3->addButton(ui->radioButton_12);}Widget::~Widget()
{delete ui;
}

image-20240909212340649

QCheckBox

QRadioButton只能选一个,而QCheckBox可以选中多个。

QCheckBox最相关的属性也是checkablechecked,都是继承自QAbstractButton

QCheckBox独有的属性tristate,用来实现“三态复选框”

示例:

image-20240909215152983

#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_pushButton_clicked()
{QString ret = "今日:";if(ui->checkBox_work->isChecked()){ret += ui->checkBox_work->text() + " ";}if(ui->checkBox_eat->isChecked()){ret += ui->checkBox_eat->text() + " ";}if(ui->checkBox_sleep->isChecked()){ret += ui->checkBox_sleep->text() + " ";}if(ui->checkBox_drink->isChecked()){ret += ui->checkBox_drink->text() + " ";}ui->label->setText(ret);
}

GIF 2024-9-9 21-50-44


http://www.mrgr.cn/news/23188.html

相关文章:

  • 数据结构—单链表的基本操作
  • C++之数据类型
  • 【人工智能】详细介绍如何在本地部署一个类似于GPT的大语言模型
  • 华为 HCIP-Datacom H12-821 题库 (6)
  • 【代码随想录训练营第42期 Day55打卡 - 图论Part5 - 并查集的应用
  • 证件照背景替换软件有哪些?证照之星怎么换背景色
  • CTK框架(七):事件监听
  • day45
  • SAP与泛微OA系统集成案例(制药行业)
  • 使用transform对html的video播放器窗口放大
  • 多路转接之poll(接口介绍,struct pollfd介绍,实现原理,实现非阻塞网络通信代码)
  • 八、3 DMA数据转运(代码)
  • Linux内核的调试(TODO)
  • 【剑指offer】题解:和为S的两个数字
  • 【网络安全 | 渗透工具-目录FUZZ】ffuf安装使用详细教程
  • 【附源码】Python :斐波那契数列(10种方法计算第n项)
  • mysql——关于表的增删改查(CRUD)
  • 【880高数】高等数学一刷错题整理
  • 华为-2022-测试面试题
  • 概率论原理精解【12】