赞
踩
QCheckBox
即复选框,常用作表单非互斥选择,,在“多选多”的场景中使用。
office word和PhotoShop中都有使用复选框,如下:
QCheckBox
有两个构造函数,都要指定父对象,其中一个可以设置复选框的文本。
QCheckBox(QWidget *parent = nullptr);
QCheckBox(const QString &text, QWidget *parent = nullptr);
同样可以通过拖动控件创建,也可以使用代码直接创建,控件创建默认使用构造函数QCheckBox(QWidget *parent = nullptr);
。
如下图创建了三个单选按钮,其中,CheckBox
通过拖拽控件创建,CheckBox1
和CheckBox2
通过代码直接创建:
QCheckBox
除了继承于QAbstractButton
的信号外,还有一个自己的信号void stateChanged(int);
,当复选框状态改变,会发出该信号,并返回复选框的状态,其中复选框的状态有三种:
Constant | Value | Description |
---|---|---|
Qt::Unchecked | 0 | 未被选中 |
Qt::PartiallyChecked | 1 | 部分被选中,即复选框有子项且子项未被全部选中 |
Qt::Checked | 2 | 被选中 |
QCheckBox
的成员函数除了继承于QAbstractButton
外,还有两个比较常用,
函数原型 | 描述 |
---|---|
void setTristate(bool y = true); | 设置复选框是否可为三种状态,函数参数默认为true,但该属性默认为false |
bool isTristate() const; | 获取复选框是否可为三种状态 |
void setCheckState(Qt::CheckState state); | 设置复选框状态 |
Qt::CheckState checkState() const; | 获取复选框状态 |
checkBox2->setTristate(true);
如图,分别展示了CheckBox的三种状态。
除了通过鼠标点击改变复选框状态,还可以通过代码设置:
其中复选框状态由枚举列出:
enum CheckState {
Unchecked,
PartiallyChecked,
Checked
};
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QCheckBox* checkBox1 = new QCheckBox("CheckBox1", this);
checkBox1->setGeometry(QRect(130, 160, 111, 22));
QCheckBox* checkBox2 = new QCheckBox("CheckBox2", this);
checkBox2->setGeometry(QRect(130, 190, 111, 22));
checkBox2->setTristate(true);
checkBox2->setCheckState(Qt::CheckState::Checked);
connect(checkBox2, SIGNAL(stateChanged(int)),
this, SLOT(checkBox2CallBack(int)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::checkBox2CallBack(int state)
{
switch(state)
{
case Qt::CheckState::Checked:
qDebug("checkBox2 is checked.");
break;
case Qt::CheckState::PartiallyChecked:
qDebug("checkBox2 is partiallyChecked.");
break;
case Qt::CheckState::Unchecked:
qDebug("checkBox2 is unchecked.");
break;
default:
break;
}
}
打印结果如下:
这里可以借助按钮组(QButtonGroup),代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QButtonGroup>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QCheckBox* checkBox1 = new QCheckBox("CheckBox1", this);
checkBox1->setGeometry(QRect(130, 160, 111, 22));
QCheckBox* checkBox2 = new QCheckBox("CheckBox2", this);
checkBox2->setGeometry(QRect(130, 190, 111, 22));
m_btnGroup = new QButtonGroup(this);
m_btnGroup->addButton(ui->checkBox, 0);
m_btnGroup->addButton(checkBox1, 1);
m_btnGroup->addButton(checkBox2, 2);
connect(m_btnGroup, SIGNAL(idClicked(int)),
this, SLOT(btnGroupCallBack(int)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::btnGroupCallBack(int btn)
{
if (m_btnGroup->button(btn)->isChecked())
{
switch(btn)
{
case 0:
qDebug("checkBox0 is checked.");
break;
case 1:
qDebug("checkBox1 is checked.");
break;
case 2:
qDebug("checkBox2 is checked.");
break;
default:
break;
}
}
}
打印结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。