记录一下,如何点击一个单选按钮,其他单选按钮处于无法选择的状态,参考网址:https://qtguide.ustclug.org/
方法一:利用QButtonGroup 类(如下图中的性别和状态)(图中偷懒写了英文)
方法二:修改UI文件,利用Group Box控件(如下图中的年龄阶段)
界面如下:
方法一:性别和状态的代码:
使用 QButtonGroup 类管理的多个单选按钮,好处是可以进行数值映射,不需要给每一个单选按钮都配备槽函数,而只需要根据 QButtonGroup 实例发出的 buttonClicked() 信号来统一处理整组的单选按钮,向 QButtonGroup 实例添加按钮的函数为:
void QButtonGroup::addButton(QAbstractButton * button, int id = -1)
可以为每个单选按钮设置唯一的 id (不要用负数,-1 是不设置序号的意思),然后当 QButtonGroup 分组里的任意一个单选按钮被点击时,都会触发信号:
void QButtonGroup::buttonClicked(int id)
根据参数里的 id 就可以判断是哪个单选按钮被点击了。
#include <QButtonGroup>
#include <QMessageBox>
//……
//cpp构造函数代码
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(PushButtonClick()));
//新建性别虚拟分组,并添加按钮和id
m_pGenderGroup = new QButtonGroup(this);
m_pGenderGroup->addButton(ui.radioButtonmale, 0); //男
m_pGenderGroup->addButton(ui.radioButtonfemale, 1); //女
//新建状态虚拟分组,并添加按钮和id
m_pStatusGroup = new QButtonGroup(this);
//不同分组的 id 是无关的,不冲突
m_pStatusGroup->addButton(ui.radioButtonGreat, 0); //棒棒哒
m_pStatusGroup->addButton(ui.radioButtonNormal, 1); //萌萌哒
m_pStatusGroup->addButton(ui.radioButtonBad, 2); //该吃药了
}
//……中间其他代码省略
void Widget::PushButtonClick()
{
//结果字符串
QString strResult;
//性别分组
int nGenderID = m_pGenderGroup->checkedId(); //获取被选中的 id
switch (nGenderID) {
case 0:
strResult += tr("male\r\n");
break;
case 1:
strResult += tr("female\r\n");
break;
default:
strResult += tr("unchecked\r\n");
break;
}
//状态分组
int nStatusID = m_pStatusGroup->checkedId(); //获取被选中的 id
switch (nStatusID) {
case 0:
strResult += tr("Great\r\n");
break;
case 1:
strResult += tr("Normal\r\n");
break;
case 2:
strResult += tr("Bad\r\n");
break;
default:
strResult += tr("unchecked\r\n");
break;
}
//年龄段四个按钮判断
if (ui.radioButton_6->isChecked())
{
strResult += tr("The age stage:0-18\r\n");
}
else if (ui.radioButton_7->isChecked())
{
strResult += tr("The age stage:19-30\r\n");
}
else if (ui.radioButton_8->isChecked())
{
strResult += tr("The age stage:31-40\r\n");
}
else if (ui.radioButton_9->isChecked())
{
strResult += tr("The age stage:41-50\r\n");
}
else if (ui.radioButton_10->isChecked())
{
strResult += tr("The age stage:51-60\r\n");
}
else if (ui.radioButton_11->isChecked())
{
strResult += tr("The age stage:>60\r\n");
}
else
{
strResult += tr("The age stage:none\r\n");
}
//strResult 获取信息完毕,弹窗显示
QMessageBox::information(this, tr("Information"), strResult);
}
//头文件定义代码
class QtWidgetsApplication1 : public QWidget
{
Q_OBJECT
public:
QtWidgetsApplication1(QWidget *parent = Q_NULLPTR);
~QtWidgetsApplication1();
private slots:
void PushButtonClick();
private:
Ui::QTUI ui;
QButtonGroup *m_pGenderGroup; //性别单选按钮分组
QButtonGroup *m_pStatusGroup; //状态单选按钮分组
};
方法二:
QT Creator或者QT Designer中选择Group Box,然后将单选按钮放入其中即可