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

举报
人才程序员 发表于 2023/07/31 21:48:32 2023/07/31
【摘要】 @TOC QRadioButtonQRadioButton片这个按钮类应对多选一的场景。打开windows的画图软件,我们就可以看到下面的:如果我们刚开始的是线,然后我们又想画矩形,则线这个框会没有,取而代之的是在矩形这里,这和Qt中的QRadioButton是差不多的。 属性没有讲的其他的可以在帮助文档搜索获取和设置显示的文本QString text() constvoid setText...

@TOC


QRadioButton

QRadioButton片这个按钮类应对多选一的场景。打开windows的画图软件,我们就可以看到下面的:
在这里插入图片描述
如果我们刚开始的是线,然后我们又想画矩形,则线这个框会没有,取而代之的是在矩形这里,这和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界面如下:
在这里插入图片描述
在槽函数中,使用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界面如下:
在这里插入图片描述
大家这些购买的东西都可以自定义。
点击确定后,打印选中的商品。
点击全选后,选择所有商品
全选需要设置三态.

代码:

//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;
}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。