当有一组按钮时,可以共用一个槽函数,在该槽函数中做判断逻辑处理,那么此时就需要用到QButtonGroup类了,例如有如下界面
可以把这四个按钮全部放到按钮组里,根据按钮的序号分别进行调用。
1 QButtonGroup类常用方法简介(1)addButton,声明如下
void QButtonGroup::addButton(QAbstractButton *button, int id = -1)
Qt助手的解释:
Adds the given button to the button group. If id is -1, an id will be assigned to the button. Automatically assigned ids are guaranteed to be negative, starting with -2. If you are assigning your own ids, use positive values to avoid conflicts.
See also removeButton() and buttons().
翻译如下:
将给定的按钮添加到按钮组。如果id为-1,则将为按钮分配一个id。自动分配的id保证是负数,从-2开始。如果您要分配自己的id,请使用正值来避免冲突。
(2)setExclusive 设置互斥
(3)按钮点击信号 buttonClicked
2 如何使用QButtonGroup包含头文件 #include
我用QtCreator创建的项目
主界面头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public slots:
void onBtnFunc(int n);
private:
Ui::MainWindow *ui;
//声明按钮组对象
QButtonGroup *m_buttonGroup;
};
#endif // MAINWINDOW_H
cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_buttonGroup = new QButtonGroup();
//将4个按钮绑定到按钮组,并设置序号
m_buttonGroup->addButton (ui->btn1, 0);
m_buttonGroup->addButton (ui->btn2, 1);
m_buttonGroup->addButton (ui->btn3, 2);
m_buttonGroup->addButton (ui->btn4, 3);
m_buttonGroup->setExclusive(true);
//按钮组信号槽
connect (m_buttonGroup, SIGNAL (buttonClicked(int)), this, SLOT(onBtnFunc(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onBtnFunc(int n)
{
quint16 a = m_buttonGroup->checkedId();
ui->lineEdit->setText("btn" + QString::number(n) + " clicked");
}
checkdId获取的好像是错误值,不知道什么鬼,不过也用不用,用信号传过来的值,或者用sender()也可以判断是哪个被点击了。
编译即可运行
QButtonGroup和sender()有点类似,二者可以配合使用。
Qt sender()的使用可以看这篇文章:https://blog.csdn.net/yao_hou/article/details/104573507
3 项目源码链接
https://github.com/linghuzhangmen/QButtonGroup_Test