创建QT对话框工程,动态创建多个按钮,把动态创建的按钮存放在QList中,并关联同一个信号槽函数,在该槽函数中根据按钮对象名称各自进行其他事项处理。
在mainwindow.h文件添加
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton> //Push按钮类
#include <QList> //列表类
#include <QDebug> //QDebug类QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void slotButtonClicked();//动态创建QPushButton按钮信号槽函数private:Ui::MainWindow *ui;QList<QPushButton*> btnPushlist;//动态创建按钮的列表QPushButton *btnPush;//动态创建按钮指针int total=3;//动态创建按钮的个数};
#endif // MAINWINDOW_H
在mainwindow.cpp添加
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//动态创建按钮for(int i=0;i<total;i++){btnPush=new QPushButton(this);//设置按钮在主对话框的位置btnPush->setGeometry(50,100*i,100,25);//设置按钮对象名字btnPush->setObjectName("btnPush"+QString::number(i));//设置按钮显示文本btnPush->setText("按钮"+QString::number(i));//向QList添加成员项btnPushlist.append(btnPush);//关联信号槽函数connect(btnPushlist.at(i),SIGNAL(clicked()),this,SLOT(slotButtonClicked()));}}MainWindow::~MainWindow()
{delete ui;//删除QList占用的内存及清空列表qDeleteAll(btnPushlist);btnPushlist.clear();
}/*===动态创建QPushButton按钮信号槽函数===*/
void MainWindow::slotButtonClicked()
{QPushButton *btn = qobject_cast<QPushButton*>(sender());//获取按钮显示文本QString text = btn->text();//获取按钮对象名称QString name = sender()->objectName();//do something在这里进行其他事项处理qDebug()<<text;qDebug()<<name;}
效果: