Qt之QButtonGroup【Qt5開發實戰】

一、新建一個QtGUI應用,基類選擇QWidget,取消建立界面,添加資源文件this

二、widget.h中code

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QCheckBox>
#include <QButtonGroup>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private:
    QButtonGroup *chk_group[2];

    QCheckBox *exclusive[3];
    QCheckBox *non_exclusive[3];

private slots:
    void chkChanged();
};

#endif // WIDGET_H

widget.cpp中blog

#include "widget.h"
#include <QDebug>
#include <QString>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QString str1[3] = {"遊戲", "Offices", "Develop"};
    QString str2[3] = {"P&rogramming", "Q&t", "O&S"};

    chk_group[0] = new QButtonGroup(this);
    chk_group[1] = new QButtonGroup(this);

    int xpos = 30;
    int ypos = 30;

    for(int i = 0; i < 3; ++i){
        exclusive[i] = new QCheckBox(str1[i], this); //能夠在多個項目中多選
        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(exclusive[i]);

        connect(non_exclusive[i], SIGNAL(clicked()), this,
                              SLOT(chkChanged()));

        ypos += 40;
    }
    chk_group[0]->setExclusive(false);  //單選
    chk_group[1]->setExclusive(true);   //多選

        exclusive[0]->setIcon(QIcon(":resources/browser.png"));
        exclusive[1]->setIcon(QIcon(":resources/calendar.png"));
        exclusive[2]->setIcon(QIcon(":resources/chat.png"));

        non_exclusive[0]->setIcon(QIcon(":resources/editor.png"));
        non_exclusive[1]->setIcon(QIcon(":resources/mail.png"));
        non_exclusive[2]->setIcon(QIcon(":resources/users.png"));
}

Widget::~Widget()
{

}

void Widget::chkChanged()
{
    for(int i = 0 ; i < 3 ; i++)
    {
        if(non_exclusive[i]->checkState())
        {
            qDebug("checkbox %d selected ", i+1);
        }
    }
}

相關文章
相關標籤/搜索