//QButtonGroup与QRadioButton单选框使用
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QRadioButton>
#include <QHBoxLayout>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QWidget *widget = new QWidget(this);
widget->setGeometry(0, 0, width(), height());
btnGroup = new QButtonGroup(this);
btnGroup->setExclusive(true);
QHBoxLayout *layout = new QHBoxLayout(widget);
layout->setSpacing(10);
layout->addStretch(1);
for(int i=0; i<3; i++)
{
QRadioButton *btn = new QRadioButton();
btn->setText("RadioButton" + QString::number(i));
layout->addWidget(btn);
btnGroup->addButton(btn);
}
layout->addStretch(1);
connect(btnGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onButtonClicked(QAbstractButton *button)
{
// 当前点击的按钮
qDebug() << QString("Clicked Button : %1").arg(button->text());
// 遍历按钮,获取选中状态
QList<QAbstractButton*> list = btnGroup->buttons();
foreach (QAbstractButton *btn, list)
{
QString strStatus = btn->isChecked() ? "Checked" : "Unchecked";
qDebug() << QString("Button : %1 is %2").arg(btn->text()).arg(strStatus);
}
}
从左到右依次按下按键,运行测试效果如下:
//从左到右依次按下按键,以下是运行测试结果:
"Clicked Button : RadioButton0"
"Button : RadioButton0 is Checked"
"Button : RadioButton1 is Unchecked"
"Button : RadioButton2 is Unchecked"
"Clicked Button : RadioButton1"
"Button : RadioButton0 is Unchecked"
"Button : RadioButton1 is Checked"
"Button : RadioButton2 is Unchecked"
"Clicked Button : RadioButton2"
"Button : RadioButton0 is Unchecked"
"Button : RadioButton1 is Unchecked"
"Button : RadioButton2 is Checked"
//QButtonGroup与QCheckBox复选框使用
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QRadioButton>
#include <QHBoxLayout>
#include <QCheckBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QWidget *widget = new QWidget(this);
widget->setGeometry(0, 0, width(), height());
btnGroup = new QButtonGroup(this);
btnGroup->setExclusive(false);
QHBoxLayout *layout = new QHBoxLayout(widget);
layout->setSpacing(10);
layout->addStretch(1);
for(int i=0; i<3; i++)
{
QCheckBox *btn = new QCheckBox();
btn->setText("CheckBox" + QString::number(i));
layout->addWidget(btn);
btnGroup->addButton(btn);
}
layout->addStretch(1);
connect(btnGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onButtonClicked(QAbstractButton *button)
{
// 当前点击的按钮
qDebug() << QString("Clicked Button : %1").arg(button->text());
// 遍历按钮,获取选中状态
QList<QAbstractButton*> list = btnGroup->buttons();
foreach (QAbstractButton *btn, list)
{
QString strStatus = btn->isChecked() ? "Checked" : "Unchecked";
qDebug() << QString("Button : %1 is %2").arg(btn->text()).arg(strStatus);
}
}
从左到右依次按下按键,运行测试效果如下:
"Clicked Button : CheckBox0"
"Button : CheckBox0 is Checked"
"Button : CheckBox1 is Unchecked"
"Button : CheckBox2 is Unchecked"
"Clicked Button : CheckBox1"
"Button : CheckBox0 is Checked"
"Button : CheckBox1 is Checked"
"Button : CheckBox2 is Unchecked"
"Clicked Button : CheckBox2"
"Button : CheckBox0 is Checked"
"Button : CheckBox1 is Checked"
"Button : CheckBox2 is Checked"