目录
一、属性和方法
1、文本
// 获取和设置显示的文本
QString text() const
void setText(const QString &text)
2、三态
复选按钮可以有三种状态:
Qt::Checked
选中Qt::Unchecked
非选中Qt::PartiallyChecked
半选中。
// 用于获取和设置是否支持三态
bool isTristate() const
void setTristate(bool y = true)
// 获取和设置复选按钮是否选中:checked/unchecked
bool isChecked() const
void setChecked(bool)
// 设置和获取复选按钮的状态
Qt::CheckState checkState() const
void setCheckState(Qt::CheckState state)
3、自动排他
// 获取和设置自动排他
bool autoExclusive() const
void setAutoExclusive(bool)
4、信号槽
// 单选按钮 QRadioButton 被点击时,会发出该信号
void clicked();
// 当复选按钮的选中状态发生改变时,会发射该信号
// 所谓状态改变,是指在 Checked/UnChecked/PartiallyChecked 之间状态改变
void stateChanged(int state)
二、案例
1、UI界面布局
2、QCheckBox核心代码
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
// 4个复选按钮对应同一个槽函数
connect(ui->checkBox_pingguo,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
connect(ui->checkBox_li,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
connect(ui->checkBox_tao,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
connect(ui->checkBox_xiangjiao,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_checkBox_all_clicked()
{
//将“全选”按钮的三态设置为false
ui->checkBox_all->setTristate(false);
//只允许在checked和unchecked之间切换,不允许出现半选状态
Qt::CheckState state = ui->checkBox_all->checkState();
if(state == Qt::Checked){
ui->checkBox_pingguo->setChecked(true);
ui->checkBox_li->setChecked(true);
ui->checkBox_tao->setChecked(true);
ui->checkBox_xiangjiao->setChecked(true);
}else if (state == Qt::Unchecked) {
ui->checkBox_pingguo->setChecked(false);
ui->checkBox_li->setChecked(false);
ui->checkBox_tao->setChecked(false);
ui->checkBox_xiangjiao->setChecked(false);
}
}
void Widget::onStateChanged()
{
QString s;
int appleChecked = ui->checkBox_pingguo->isChecked();
int pearChecked = ui->checkBox_li->isChecked();
int peachChecked = ui->checkBox_tao->isChecked();
int bananaChecked = ui->checkBox_tao->isChecked();
if(appleChecked && peachChecked && pearChecked && bananaChecked){
ui->checkBox_all->setCheckState(Qt::Checked);
}else if (!(appleChecked || peachChecked || pearChecked || bananaChecked)){
ui->checkBox_all->setCheckState(Qt::Unchecked);
}else {
ui->checkBox_all->setCheckState(Qt::PartiallyChecked);
}
if(appleChecked) {
s += ui->checkBox_pingguo->text() += " ";
}
if(pearChecked) {
s += ui->checkBox_li->text() += " ";
}
if(peachChecked) {
s += ui->checkBox_tao->text() += " ";
}
if(bananaChecked) {
s += ui->checkBox_xiangjiao->text() += " ";
}
ui->lineEdit_xuanze->setText(s);
}