判断QButtonGroup中哪个QRadioButton被选中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断QButtonGroup中哪个QRadioButton被选中相关的知识,希望对你有一定的参考价值。

参考技术A T qobject_cast ( QObject * object )如果object是T类型或者它的子类,就可以把object返回成T类型对象。否则返回0。类T必须是QObject的子类,而且必须声明宏:Q_OBJECTExample: Cpp代码 QObject *obj = new QTimer; // QTimer inherits QObject QTimer *timer = qobject_cast<QTimer *>(obj); // timer == (QObject *)obj QAbstractButton *button = qobject_cast<QAbstractButton *>(obj); // button == 0 问题 方法1、可以通过对象名称去判断Cpp代码 QAbstractButton *radioButton = qobject_cast<QAbstractButton *> (ui.buttonGroup_1->checkedButton()); //ui.buttonGroup_1->checkedButton() 返回一个QRadioButton对象 //将它转换成QAbstractButton //,通过对象名称去判断 if(QString::compare(radioButton->objectName(), "topTubePositionRadio", Qt::CaseSensitive)) tubePosition = 0; else if(QString::compare(radioButton->objectName(), "bottomTubePositionRadio", Qt::CaseSensitive)) tubePosition = 1; else if (QString::compare(radioButton->objectName(), "lateralTubePositionRadio", Qt::CaseSensitive)) tubePosition = 2;
方法2:通过checkedId去判断首先需要在界面被激活初始化设置buttonGroup中的IdCpp代码 ui.buttonGroup_1->setId(ui.topTubePositionRadio,0);//topTubePositionRadio的Id设为0 ui.buttonGroup_1->setId(ui.bottomTubePositionRadio,1); ui.buttonGroup_1->setId(ui.lateralTubePositionRadio,2);
然后在你想获取哪个radioButton被选中时直接获取checkedId值,最后判断一下这个Id值就可以了。quint16 a = ui.buttonGroup_1->checkedId(); 很纳闷为啥QtDesigner中没有界面直接赋给这个radioButton,Id值?????或许是没有必要吧,第一种方法也可以。

Qt-QButtonGroup

1.包含头文件

#include <QButtonGroup>
2.
  QButtonGroup *buttonGroup;
1   buttonGroup = new QButtonGroup();
2     buttonGroup->addButton (ui.noSpace_Btn, 0);
3     buttonGroup->addButton (ui.smallSpace_Btn, 1);
4     buttonGroup->addButton (ui.mediumSpace_Btn, 2);
5     buttonGroup->addButton (ui.bigSpace_Btn, 3);

3/可以手动指定一个id被选 中

1  QRadioButton *path = qobject_cast<QRadioButton*> (buttonGroup->button (mSelectRadioButton));
2     path->setChecked (true);
 connect (buttonGroup, SIGNAL (buttonClicked (int)), this, SLOT (buttonJudge (int)));
 quint16 a = buttonGroup->checkedId();

上面的基本功能应该可以实现了。

资料解析:

常用方法 

void QButtonGroup::addButton ( QAbstractButton * button )

Adds the given button to the end of the group‘s internal list of buttons. An id will be assigned to the button by this QButtonGroup. Automatically assigned ids are guaranteed to be negative, starting with -2. If you are also assigning your own ids, use positive values to avoid conflicts.

如果不手动指定id,会有默认的从-2开始,建议手动指定,可以初始化也可以分开

void QButtonGroup::setId ( QAbstractButton * button, int id )
Sets the id for the specified button. Note that id can not be -1.

可以让其它互斥,也可以设定

bool exclusive () const
void setExclusive ( bool )

也可以移除:

void QButtonGroup::removeButton ( QAbstractButton * button )
Removes the given button from the button group.

其它的参考帮助手册,常用的也就是这么多

信号也有很多,看自己的情况使用

void QButtonGroup::buttonClicked ( int id ) [signal]可以拿到id

void QButtonGroup::buttonClicked ( QAbstractButton * button ) [signal]可以拿手button

还有其它的

void buttonPressed ( QAbstractButton * button )
void buttonPressed ( int id )
void buttonReleased ( QAbstractButton * button )
void buttonReleased ( int id )

问题,我在里面放QPushButton时设定id会一直返回65535也就是-1,证明没有拿到checkid,后来自己按钮少就改用:

1  QPushButton *qtt =    qobject_cast<QPushButton*> (sender());
2     
3     if ("strartStopAlarm_Btn" == qtt->objectName())
4     {
5         alarmTemp->StartStopTimer();
6     }

为了工作,先实现了功能 ,但感觉这不是好方法 ,看客如果有好方法,请回复我一下。

 

以上是关于判断QButtonGroup中哪个QRadioButton被选中的主要内容,如果未能解决你的问题,请参考以下文章

Qt-QButtonGroup

QButtonGroup 的使用

Qt设计界面中窗口的折叠,该怎么处理

QT中button的问题

JS如何判断表单中用户选择哪个哪个选项?

Android中判断当前处于哪个Activity