本文主要总结获取QButtonGroup被选中按钮QPushbutton的ObjectName用法。
要在按钮组QButtonGroup获取被选中按钮的ObjectName,只需要用到一个函数T qobject_cast ( QObject * object ),其中object的目标是被选中按钮(用函数QButtonGroup::checkedButton()可以实现)。函数qobject_cast的主要功能是获取被选中按钮的对象入口地址,可以通过该入口地址直接操作被选中按钮,比如可以获取对象的objectName。
实现步骤:(QButtonGroup有触发信号,可以判断哪个按钮被选中)
a1.将QButtonGroup的对象buttonGroup实例为全局变量,然后添加几个QPushbutton按钮;
a2.通过connect(buttonGroup,SIGNAL(buttonClicked(int)),this,SLOT(buttonGroupSlot(int)))绑定buttonGroup的触发信号和槽函数;
a3.然后在槽函数中添加如下语句,就可以获取QButtonGroup中被选中按钮的objectName。
QPushButton* pbtn = qobject_cast<QPushButton*>(buttonGroup->checkedButton());
qDebug()<<pbtn->objectName();
具体的实例工程代码如下所述:
1.1新建一个widget工程,不要勾选ui界面。然后分别在widget.h,widget.cpp,main.cpp分别添加如下代码。
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QButtonGroup>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
void setupUI();
QButtonGroup *buttonGroup;
private slots:
void on_changeButtonGroup(int);
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//窗口UI界面初始化
setupUI();
}
Widget::~Widget()
{
}
void Widget::setupUI()
{
QPushButton *button1 = new QPushButton("button1");
button1->setObjectName("button1");
button1->setCheckable(true);
QPushButton *button2 = new QPushButton("button2");
button2->setObjectName("button2");
button2->setCheckable(true);
QPushButton *button3 = new QPushButton("button3");
button3->setObjectName("button3");
button3->setCheckable(true);
buttonGroup = new QButtonGroup;
buttonGroup->addButton(button1);
buttonGroup->addButton(button2);
buttonGroup->addButton(button3);
buttonGroup->setExclusive(true);
connect(buttonGroup,SIGNAL(buttonClicked(int)),this,SLOT(on_changeButtonGroup(int)));
QHBoxLayout *topLayout = new QHBoxLayout();
topLayout->setMargin(0);
topLayout->setSpacing(0);
topLayout->addWidget(button1);
topLayout->addWidget(button2);
topLayout->addWidget(button3);
topLayout->addStretch();
QVBoxLayout *mainLayout = new QVBoxLayout();
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
mainLayout->addLayout(topLayout);
mainLayout->addStretch();
this->setLayout(mainLayout);
}
void Widget::on_changeButtonGroup(int)
{
QPushButton *checkedButton = qobject_cast<QPushButton*>(buttonGroup->checkedButton());
QString checkedBtnObjectName = checkedButton->objectName();
qDebug()<<tr("被选中按钮的objectName==%1").arg(checkedBtnObjectName);
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.resize(960,640);
w.setWindowTitle(QString::fromUtf8("获取QButtonGroup被选中按钮的objectName"));
w.show();
return a.exec();
}
1.2程序构建和运行后,结果如下图所示:
参考内容: