Qt::QRadioButtonTest操作
前言:
本文操作均为在vs2015+QT5.9.5版本中执行
头文件:qradiobuttontest.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_qradiobuttontest.h"
class QRadioButtonTest : public QWidget
{
Q_OBJECT
public:
QRadioButtonTest(QWidget *parent = Q_NULLPTR);
public slots:
void Seve();
private:
Ui::QRadioButtonTestClass ui;
};
UI文件:ui_qradiobuttontest.h
/********************************************************************************
** Form generated from reading UI file 'qradiobuttontest.ui'
**
** Created by: Qt User Interface Compiler version 5.9.5
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_QRADIOBUTTONTEST_H
#define UI_QRADIOBUTTONTEST_H
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_QRadioButtonTestClass
{
public:
void setupUi(QWidget *QRadioButtonTestClass)
{
if (QRadioButtonTestClass->objectName().isEmpty())
QRadioButtonTestClass->setObjectName(QStringLiteral("QRadioButtonTestClass"));
QRadioButtonTestClass->resize(300, 400);
retranslateUi(QRadioButtonTestClass);
QMetaObject::connectSlotsByName(QRadioButtonTestClass);
} // setupUi
void retranslateUi(QWidget *QRadioButtonTestClass)
{
QRadioButtonTestClass->setWindowTitle(QApplication::translate("QRadioButtonTestClass", "QRadioButtonTest", Q_NULLPTR));
} // retranslateUi
};
namespace Ui {
class QRadioButtonTestClass: public Ui_QRadioButtonTestClass {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_QRADIOBUTTONTEST_H
主函数:main.cpp
#include "qradiobuttontest.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QRadioButtonTest w;
w.show();
return a.exec();
}
实现文件:qradiobuttontest.cpp
#include "qradiobuttontest.h"
#include <QButtonGroup>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QPushButton>
#include <QMessageBox>
#include <QDebug>
QRadioButtonTest::QRadioButtonTest(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
//控件创建与设置
//创建三个RadioButton按钮
QRadioButton *Rb1 = new QRadioButton("QRadioButton_1");
QRadioButton *Rb2 = new QRadioButton("QRadioButton_2");
QRadioButton *Rb3 = new QRadioButton("QRadioButton_3");
//创建一个按钮组
QButtonGroup *Group = new QButtonGroup(this);
//设置一个对象名称
Group->setObjectName("Group");
//添加到QButtonGroup组
Group->addButton(Rb1);
Group->addButton(Rb2);
Group->addButton(Rb3);
//创建垂直布局
QVBoxLayout *vb = new QVBoxLayout(this);
//遍历按钮组
for (int i = 0; i < Group->buttons().size(); i++)
{
vb->addWidget(Group->buttons()[i]);
}
//创建一个pushbutton按钮
QPushButton *but = new QPushButton("Seve");
vb->addWidget(but);
//信号与槽绑定
connect(but, SIGNAL(clicked()), this, SLOT(Seve()));
}
void QRadioButtonTest::Seve()
{
//检查QButtonGroup里是否为空,再次之前要设置Group->setObjectName("Group");别名
QButtonGroup *group = this->findChild<QButtonGroup*>("Group");
if (!group)
{
QMessageBox::warning(this, "error", "group is NULL!");
return;
}
//检查是否选中QRadioButton
QRadioButton *but = (QRadioButton *)group->checkedButton();
if (!but)
{
QMessageBox::warning(this, "error", "but is NULL!");
return;
}
QMessageBox::information(this, "", but->text());
}