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