文章目录
- QRadioButton
- 属性
- 示例代码:
- QCheckBox
- 属性
- 示例代码
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;
}