QCheckBox继承自QAbstractButton,它提供了一个带文本标签的复选框(提供选择)。
复选框是一个带有文本的选择按钮,可以被打开(Checked)也可以被关闭(Unchecked)。
复选框的状态变化会发射一个信号stateChanged(),可以使用isChecked()判断复选框有没有被选择。需要效果如下图:
Header:#include <QCheckBox>
qmake:QT += widgets
1,mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QButtonGroup>
#include <QCheckBox>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
QCheckBox* exclusive[3];
QCheckBox* non_exclusive[3];
public slots:
void chkChanged();
};
#endif
2,mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->resize(270,191); // 重新设置窗体大小
this->centralWidget(); // 将窗体放置在屏幕中间
QString str1[] = {"Game","Office","Develop"};
QString str2[] = {"Programming","Qt","OS"};
int xpos = 30 ;
int ypos = 30 ;
QButtonGroup* chk_group[2]; // 按钮组控件,只是逻辑上的分类而已
chk_group[0] = new QButtonGroup(this);
chk_group[1] = new QButtonGroup(this);
for(int i=0;i<3;i++)
{
exclusive[i] = new QCheckBox(str1[i],this);//复选框可以显示文本(str[i])或者图标
exclusive[i]->setGeometry(xpos,ypos,100,30);
chk_group[0]->addButton(exclusive[i]);
non_exclusive[i] = new QCheckBox(str2[i],this);
non_exclusive[i]->setGeometry(xpos+120,ypos,100,30);
chk_group[1]->addButton(non_exclusive[i]);
ypos += 40 ;
}
chk_group[0]->setExclusive(false); // 单选使能,只能单选
chk_group[1]->setExclusive(true); // 多选使能,可多选
exclusive[0]->setIcon(QIcon("res/01.png"));
exclusive[1]->setIcon(QIcon("res/02.png"));
exclusive[2]->setIcon(QIcon("res/03.png"));
non_exclusive[0]->setIcon(QIcon("res/04.png"));
non_exclusive[1]->setIcon(QIcon("res/05.png"));
non_exclusive[2]->setIcon(QIcon("res/06.png"));
connect(exclusive[0],SIGNAL(clicked()),this,SLOT(chkChanged()));
connect(exclusive[1],SIGNAL(clicked()),this,SLOT(chkChanged()));
connect(exclusive[2],SIGNAL(clicked()),this,SLOT(chkChanged()));
}
MainWindow::~MainWindow()
{
}
void MainWindow::chkChanged()
{
for(int i=0 ; i<3 ; i++)
{
if(exclusive[i]->checkState()) //返回复选框的选中状态.若checkbox被激活返回true,否则false
{
qDebug("checkbox %d selected",i+1);
}
}
}
3,main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
补充:
1,QCheckBox *checkbox = new QCheckBox("C&ase sensitive", this); //复选框可以显示文本或者图标
2,Qt::CheckState checkState() const //返回复选框的选中状态。如果不需要三态的支持,可以使用QAbstractButton::isChecked(),它返回一个布尔值。
bool isTristate() const // 复选框是否为一个三态复选框。 默认的是false,也就是说复选框只有两个状态。
void setCheckState(Qt::CheckState state) // 设置复选框的选中状态。如果不需要三态的支持,可以使用QAbstractButton:setChecked(),它接受一个布尔值。
void setTristate(bool y = true) //设置复选框为一个三态复选框。
3,void stateChanged(int state) //当复选框状态发生改变,这个信号就会被发射。即:用户选中或者取消选中。