这里主要用到的是控件是 QRadioButton、QVBoxLayout
主要用到的方法是按钮组的遍历
QRadioButton 是一个单选按钮,多个单选按钮在同一层的时候只能有一个被选中
QVBoxLayout 是一个垂直布局器,将控件垂直分布于布局器中
用QT创建一个 widget 项目,手动在 widgey.cpp 中添加控件
其中引入了 QRadioButton、QButtonGroup、QVBoxLayout、QPushButton、QMessageBox
#include "widget.h"
#include "ui_widget.h"
#include <QRadioButton>
#include <QButtonGroup>
#include <QVBoxLayout>
#include <QPushButton>
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
// 创建三个单选按钮
QRadioButton *rbut1 = new QRadioButton("单选按钮1");
QRadioButton *rbut2 = new QRadioButton("单选按钮2");
QRadioButton *rbut3 = new QRadioButton("单选按钮3");
// 创建一个按钮组,将单选按钮全部加入按钮组
QButtonGroup *group = new QButtonGroup(this);
group->setObjectName("ButtonGroup"); // 写入对象名称,用于被获取
group->addButton(rbut1);
group->addButton(rbut2);
group->addButton(rbut3);
// 创建一个垂直布局,将按钮组加入到布局中
QVBoxLayout *vb = new QVBoxLayout(this);
//group->addButton(rbut1); 这行代码会报错,无法将按钮组直接加入到布局中
// 遍历按钮组的所有按钮,并将按钮加入到布局中
for(int i = 0; i < group->buttons().size(); i++)
{
vb->addWidget(group->buttons()[i]);
}
// 创建一个按钮,并加入到布局中
QPushButton *but = new QPushButton("测试");
vb->addWidget(but);
// 链接槽函数
QObject::connect(but,SIGNAL(clicked()),this,SLOT(Test()));
}
// 打印出选择的按钮名
void Widget::Test()
{
// 获取按钮组,查找this的子类,通过对象类型和对象名获取
QButtonGroup *gro = this->findChild<QButtonGroup*>("ButtonGroup");
if(!gro) return; // 如果没有获取到按钮组,则退出 这里演示的话当然是可以获取到的
// 获取被选中的按钮 对按钮组中被选中的按钮进行一次强制转换
QRadioButton *rbut = (QRadioButton*) gro->checkedButton();
if(!rbut) // 如果不加入这个判断的话,运行后不做选择直接点击测试按钮会宕掉
{
QMessageBox::warning(this,"警告","请选择按钮");
return;
}
// 弹出信息框,显示被选择的按钮名
QMessageBox::information(this,"提示",rbut->text());
}
Widget::~Widget()
{
delete ui;
}
下面是运行效果: