QButtonGroup只是对逻辑控制,不对显示控制,默认单项,可选多项,效果如下:
代码如下:
#ifndef TESTWGT_H
#define TESTWGT_H
#include <QWidget>
#include <QButtonGroup>
class TestWgt : public QWidget
{
Q_OBJECT
public:
explicit TestWgt(QWidget *parent = 0);
~TestWgt();
private:
void initObject();
void initConnect();
private slots:
void slot_BtnGroupChanged(int);
void slot_RtnGroupChanged(int);
void slot_ChxGroupChanged(int);
private:
QButtonGroup *m_pBtnGroup;
QButtonGroup *m_pRtnGroup;
QButtonGroup *m_pChxGroup;
};
#endif // TESTWGT_H
#include "testwgt.h"
#include "ui_testwgt.h"
#include <QDebug>
#include <QCheckBox>
#include <QPushButton>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
TestWgt::TestWgt(QWidget *parent) :
QWidget(parent)
{
initObject();
initConnect();
}
TestWgt::~TestWgt()
{
}
void TestWgt::initObject()
{
this->setWindowTitle(tr("QButtonGroup"));
this->setFixedSize(500,300);
QPushButton *pTestBtn1 = new QPushButton;
QPushButton *pTestBtn2 = new QPushButton;
QPushButton *pTestBtn3 = new QPushButton;
m_pBtnGroup = new QButtonGroup(this);
m_pBtnGroup->addButton(pTestBtn1,0);
m_pBtnGroup->addButton(pTestBtn2,1);
m_pBtnGroup->addButton(pTestBtn3,2);
QHBoxLayout* pHVlayout1 = new QHBoxLayout();
pHVlayout1->setMargin(0);
pHVlayout1->setSpacing(0);
pHVlayout1->addStretch();
pHVlayout1->addWidget(pTestBtn1);
pHVlayout1->addStretch();
pHVlayout1->addWidget(pTestBtn2);
pHVlayout1->addStretch();
pHVlayout1->addWidget(pTestBtn3);
pHVlayout1->addStretch();
QCheckBox *pTestChx1 = new QCheckBox;
QCheckBox *pTestChx2 = new QCheckBox;
QCheckBox *pTestChx3 = new QCheckBox;
m_pChxGroup= new QButtonGroup(this);
m_pChxGroup->addButton(pTestChx1,0);
m_pChxGroup->addButton(pTestChx2,1);
m_pChxGroup->addButton(pTestChx3,2);
// 设置不互斥
pChxGroup->setExclusive(false);//这样的话就支持多选了
QHBoxLayout* pHVlayout2 = new QHBoxLayout();
pHVlayout2->setMargin(0);
pHVlayout2->setSpacing(0);
pHVlayout2->addStretch();
pHVlayout2->addWidget(pTestChx1);
pHVlayout2->addStretch();
pHVlayout2->addWidget(pTestChx2);
pHVlayout2->addStretch();
pHVlayout2->addWidget(pTestChx3);
pHVlayout2->addStretch();
QRadioButton *pTestRtn1 = new QRadioButton;
QRadioButton *pTestRtn2 = new QRadioButton;
QRadioButton *pTestRtn3 = new QRadioButton;
m_pRtnGroup= new QButtonGroup(this);
m_pRtnGroup->addButton(pTestRtn1,0);
m_pRtnGroup->addButton(pTestRtn2,1);
m_pRtnGroup->addButton(pTestRtn3,2);
// 设置不互斥
pRtnGroup->setExclusive(false);//这样的话就支持多选了
QHBoxLayout* pHVlayout3 = new QHBoxLayout();
pHVlayout3->setMargin(0);
pHVlayout3->setSpacing(0);
pHVlayout3->addStretch();
pHVlayout3->addWidget(pTestRtn1);
pHVlayout3->addStretch();
pHVlayout3->addWidget(pTestRtn2);
pHVlayout3->addStretch();
pHVlayout3->addWidget(pTestRtn3);
pHVlayout3->addStretch();
QVBoxLayout* pMainVlayout = new QVBoxLayout(this);
pMainVlayout->setMargin(0);
pMainVlayout->setSpacing(0);
pMainVlayout->addStretch();
pMainVlayout->addLayout(pHVlayout1);
pMainVlayout->addStretch();
pMainVlayout->addLayout(pHVlayout2);
pMainVlayout->addStretch();
pMainVlayout->addLayout(pHVlayout3);
pMainVlayout->addStretch();
}
void TestWgt::initConnect()
{
connect(m_pBtnGroup,SIGNAL(buttonClicked(int)),this,SLOT(slot_BtnGroupChanged(int)));
connect(m_pRtnGroup,SIGNAL(buttonClicked(int)),this,SLOT(slot_RtnGroupChanged(int)));
connect(m_pChxGroup,SIGNAL(buttonClicked(int)),this,SLOT(slot_ChxGroupChanged(int)));
}
void TestWgt::slot_BtnGroupChanged(int id)
{
qDebug() << "slot_BtnGroupChanged=>" << id << endl;
}
void TestWgt::slot_RtnGroupChanged(int id)
{
qDebug() << "slot_RtnGroupChanged=>" << id << endl;
}
void TestWgt::slot_ChxGroupChanged(int id)
{
qDebug() << "slot_ChxGroupChanged=>" << id << endl;
}
#include <QApplication>
#include "testwgt.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TestWgt w;
w.show();
return a.exec();
}