【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Radio Button的使用及说明

简介: 【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Radio Button的使用及说明

Qt常用控件 | 按钮类控件 | Radio Button的使用及说明

一、QAbstractButton类

1. 介绍

QAbstractButton类是Qt中所有按钮类的基类,它提供了一些基本的按钮功能和属性。它是一个抽象类,不能直接实例化,而是通过继承它来创建具体的按钮类。


通过继承QAbstractButton类,我们可以创建不同类型的按钮,如QPushButton、QCheckBox、QRadioButton等。这些具体的按钮类会继承并扩展QAbstractButton类的功能,以实现不同类型按钮的特定功能。

2. QAbstractButton的子类

image.png

二、QRadioButton介绍

1. 简介

在Qt中,QRadioButton是一种可以在用户界面中选择某个选项的按钮控件。它被设计为一组互斥的按钮,意味着在同一组中只能选择一个单选按钮。


QRadioButton继承自QAbstractButton,因此它具有一些共同的功能,例如设置文本、图标、状态等。它还可以发出clicked()信号,以便在用户单击按钮时执行相应的操作。


要使用QRadioButton,首先需要创建一个QRadioButton对象,并设置其文本。然后,可以将其添加到窗口或布局中,以便在应用程序中显示。在设计应用程序时,可以将多个QRadioButton对象放置在同一窗口中,并将它们分为不同的组,以实现单选按钮的功能。


通过使用QButtonGroup类,可以将多个QRadioButton对象分为不同的组。这样,在同一组中只能选择一个单选按钮。可以使用QButtonGroup的addButton()方法将QRadioButton对象添加到组中,并使用setId()方法为每个按钮设置唯一的ID。

2. 常用属性及方法

QRadioButton具有以下属性:

text(): 用于获取单选按钮的文本标签。


setText(const QString &text): 用于设置单选按钮的文本标签。


isChecked(): 用于检查单选按钮是否被选中。


setChecked(bool checked): 用于设置单选按钮是否被选中。


setIcon(const QIcon &icon): 设置单选按钮的图标。


setIconSize(const QSize &size): 设置单选按钮的图标大小。


setAutoExclusive(bool exclusive): 设置单选按钮是否自动排除其他已选中的单选按钮。


QAbstractButton 中和 QRadioButton 关系较大的属性

属性 说明
checkable 是否能选中
checked 是否已经被选中. checkable 是 checked 的前提条件.
autoExclusive 是否排他.选中⼀个按钮之后是否会取消其他按钮的选中.对于 QRadioButton 来说默认就是排他的


三、QRadioButton的使用(代码示例)

1. 使用代码编写选择性别

  1. 在界⾯上创建⼀个 label, 和 3 个 单选按钮RadioButton

  2. 修改 widget.cpp, 编辑三个QRadioButton的 slot 函数

  3. 设置默认选项,让程序启动默认选中性别男

  4. 设置禁用的选项,有两种方式(一种不彻底一种彻底)

  5. 运行程序,就可以选择性别,label 中的提示文字就会随之变化

文件代码:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_radioButton_male_clicked();

    void on_radioButton_female_clicked();

    void on_radioButton_other_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置默认选项
    ui->radioButton_male->setChecked(true);
    ui->label->setText("请选择你的性别:男");

    //设置禁用选项
    //ui->radioButton_other->setCheckable(false);

    ui->radioButton_other->setEnabled(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("请选择你的性别:私密");
}

2. 查看click, press, release, toggled的区别

  1. 在界⾯上创建四个单选按钮
  2. 给 1 创建 clicked 槽函数, 给 2 创建 pressed 槽函数, 给 3 创建 released 槽函数,给 4 创建 toggled 槽函数
  3. 运⾏程序, 可以看到


  • clicked 是⼀次⿏标按下+⿏标释放触发的.
  • pressed 是⿏标按下触发的.
  • released 是⿏标释放触发的.
  • toggled 是 checked 属性改变时触发的.


文件代码:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_radioButton_clicked();

    void on_radioButton_2_pressed();

    void on_radioButton_3_released();

    void on_radioButton_4_toggled(bool checked);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
#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()
{
    qDebug()<<"clicked";
}

void Widget::on_radioButton_2_pressed()
{
    qDebug()<<"pressed";
}

void Widget::on_radioButton_3_released()
{
    qDebug()<<"released";
}

void Widget::on_radioButton_4_toggled(bool checked)
{
    if(checked)
    {
        qDebug()<<"toggled checked true";
    }
    else
    {
        qDebug()<<"toggled checked false";
    }
}

3. 单选框分组(QButtonGroup的使用)

  1. 在界⾯上创建 6 个单选框, ⽤来模拟肯德基点餐界⾯
    此时直接运⾏程序, 可以看到, 这六个 QRadioButton 之间都是排他的.
  2. 引⼊ QButtonGroup 进⾏分组.并编辑widget.cpp
  3. 运行结果,就可以分开选择了

文件代码:

#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);
     
     //两两⼀组, 放到三个 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;
}
目录
相关文章
|
2月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
441 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
2月前
|
前端开发 程序员 API
【Qt】控件介绍
【Qt】控件介绍
|
2月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
164 4
|
2月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
521 4
|
2月前
|
数据安全/隐私保护
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
277 4
|
2月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
185 3
|
2月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
65 3
|
2月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
384 3
|
2月前
|
网络协议 Linux C++
【Qt】多种控件实现“hello world“
【Qt】多种控件实现“hello world“
|
3月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
163 1
Qt(C++)开发一款图片防盗用水印制作小工具