Qt之单选按钮和复选按钮(QRadioButton、QCheckBox)

简介: Qt之单选按钮和复选按钮(QRadioButton、QCheckBox)

QRadioButton

QRadioButton片这个按钮类应对多选一的场景。打开windows的画图软件,我们就可以看到下面的:

5218b31387c041898cd8bdacc3d9aa3f.png

如果我们刚开始的是线,然后我们又想画矩形,则线这个框会没有,取而代之的是在矩形这里,这和Qt中的QRadioButton是差不多的。

属性

没有讲的其他的可以在帮助文档搜索

获取和设置显示的文本

QString text() const
void setText(const QString &text)

获取和设置单选按钮的选中状态

bool isChecked() const
void setChecked(bool)

获取和设置自动排他

bool autoExclusive() const
void setAutoExclusive(bool)

自动排他是什么意思:

选中一个,其他的自动取消选中。

同组的QRadioButton之间才有关系。

如:我们可以把它放在QGoupBox/QWidget…里面,他们就是一个组的了。

信号:

当状态改变时,发送。

void toggled(bool checked)//指选中变为非选中,和非选中变为选中

点击按钮:

void clicked();


示例:

功能:当用户选择后,qDebug打印评分的范围.

ui界面如下:

dcb4bf75d0b9437e88972e6a9c01884b.png


在槽函数中,使用sender()可以得到发送信号的对象

QRadioButton *radio = reinterpret_cast<QRadioButton*>(sender());

示例代码:

//Widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
private:
    Ui::Widget *ui;
private slots:
    void Toggled(bool checked);
};
#endif // WIDGET_H
//Widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->radioButton,SIGNAL(toggled(bool)),this,SLOT(Toggled(bool)));
    connect(ui->radioButton_2,SIGNAL(toggled(bool)),this,SLOT(Toggled(bool)));
    connect(ui->radioButton_3,SIGNAL(toggled(bool)),this,SLOT(Toggled(bool)));
}
void Widget::Toggled(bool checked)
{
    if(checked)
    {
        QRadioButton *radio = reinterpret_cast<QRadioButton*>(sender());
        qDebug() << radio->text();
    }
}
Widget::~Widget()
{
    delete ui;
}

QCheckBox

他和QRadioButton本质的区别就是,QCheckBox可以选择多个,无自动排他。

属性

获取和设置显示的文本

QString text() const
void setText(const QString &text)

用于获取和设置是否支持三态

bool isTristate() const
void setTristate(bool y = true)

三态是什么:

Qt::Checked 选中

Qt::Unchecked 非选中

Qt::PartiallyChecked 半选中,比如当一组复选按钮中只选择了部分时

设置和获取复选按钮的状态

Qt::CheckState checkState() const
void setCheckState(Qt::CheckState state)

信号:

状态发生改变:

//当复选按钮的选中状态发生改变时,会发射该信号
void stateChanged(int state)

Qt::Checked->Qt::Unchecked->Qt::PartiallyChecked->Qt::Checked变化,发送信号。

示例代码

ui界面如下:

f179b51b8c6a4c09a4a3e8b09b812777.png


大家这些购买的东西都可以自定义。

点击确定后,打印选中的商品。

点击全选后,选择所有商品

全选需要设置三态.

代码:

//Widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QList>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
    Q_OBJECT
    QList<bool> state;//记录没有点击全选前的状态
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
private:
    Ui::Widget *ui;
private slots:
    void clicked_ok();//确定按钮点击时
    void Select_all(int state);//点击全选时
};
#endif // WIDGET_H
//Widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(clicked_ok()));
    connect(ui->checkBox_7,SIGNAL(stateChanged(int)),this,SLOT(Select_all(int)));
}
void Widget::clicked_ok()
{
//打印商品
    if(ui->checkBox->checkState())
        qDebug() << ui->checkBox->text();
    if(ui->checkBox_2->checkState())
        qDebug() << ui->checkBox_2->text();
    if(ui->checkBox_3->checkState())
        qDebug() << ui->checkBox_3->text();
    if(ui->checkBox_4->checkState())
        qDebug() << ui->checkBox_4->text();
    if(ui->checkBox_5->checkState())
        qDebug() << ui->checkBox_5->text();
    if(ui->checkBox_6->checkState())
        qDebug() << ui->checkBox_6->text();
}
void Widget::Select_all(int state)
{
    if(state == Qt::Checked)
    {
      //记录
        this->state.clear();
        this->state.append(ui->checkBox->checkState());
        this->state.append(ui->checkBox_2->checkState());
        this->state.append(ui->checkBox_3->checkState());
        this->state.append(ui->checkBox_4->checkState());
        this->state.append(ui->checkBox_5->checkState());
        this->state.append(ui->checkBox_6->checkState());
    //全选操作
        ui->checkBox->setChecked(true);
        ui->checkBox_2->setChecked(true);
        ui->checkBox_3->setChecked(true);
        ui->checkBox_4->setChecked(true);
        ui->checkBox_5->setChecked(true);
        ui->checkBox_6->setChecked(true);
    }
    else if(state == Qt::PartiallyChecked)
    {
        if(!this->state.empty())//不为空时进入
        {
          //设置回原来的状态
            ui->checkBox->setChecked(this->state[0]);
            ui->checkBox_2->setChecked(this->state[1]);
            ui->checkBox_3->setChecked(this->state[2]);
            ui->checkBox_4->setChecked(this->state[3]);
            ui->checkBox_5->setChecked(this->state[4]);
            ui->checkBox_6->setChecked(this->state[5]);
        }
    }
}
Widget::~Widget()
{
    delete ui;
}
相关文章
|
7月前
|
安全 前端开发 C++
C++视角下的Qt按钮:从基础应用到高级定制(二)
C++视角下的Qt按钮:从基础应用到高级定制
163 2
|
7月前
|
XML JSON 算法
C++视角下的Qt按钮:从基础应用到高级定制(一)
C++视角下的Qt按钮:从基础应用到高级定制
502 2
|
7月前
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
95 0
|
7月前
QT中按钮格式QSS代码
QT中按钮格式QSS代码
06 QT - 按钮创建
06 QT - 按钮创建
55 0
|
4月前
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Radio Button的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Radio Button的使用及说明
706 1
|
4月前
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明
185 0
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明
|
4月前
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明
115 0
|
6月前
Qt控件(按钮、单选、复选、list、tree、table)
Qt控件(按钮、单选、复选、list、tree、table)
|
6月前
Qt之按钮操作
Qt之按钮操作