qt5之QCheckBox学习

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)    //当复选框状态发生改变,这个信号就会被发射。即:用户选中或者取消选中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开缓缓归以

你的鼓励将是我创作的最大动力,

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值