Сделайте все эти QPushButton
члены класса такими, чтобы они создавались и уничтожались должным образом, а не создавали их в цикле.
Как только вы получитекаждый в качестве отдельного члена, затем используйте метод InitializeConnections()
и создайте все соединения под ним, используя синтаксис Qt connect.
Если вы считаете, что эти кнопки являются частью MainWindow
class, тогда ваш класс может выглядеть примерно так:
class MainWindow{
...
...
private :
// Will make connections of each button to it's respective slot.
void InitializeConnections();
private :
QPushButton *mAmputationButton;
QPushButton *mAsthmaButton;
//.. so on
};
А в MainWindow.cpp
:
#include <QPushButton>
#include <QVBoxLayout>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
mAmputationButton(new QPushButton("Amputation") ),
mAsthmaButton(new QPushButton("Asthama") )
{
InitializeConnections();
}
void MainWindow::InitializeConnections()
{
connect(mAmputationButton, &QPushButton::clicked, this, &MainWindow::amputation_slot );
connect(mAsthmaButton, &QPushButton::clicked, this, &MainWindow::asthma_slot );
// same way for others.
}
Слоты, которые я упомянул, приведены, например, только для подключения их кслот, к которому он должен быть подключен.
ОБНОВЛЕНИЕ:
Вот мини-реализация, выполненная с использованием всего двух кнопок:
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QPushButton;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QPushButton *mAmputationButton;
QPushButton *mAsthmaButton;
private slots:
void on_pushButton_clicked();
};
MainWindow.cpp
#include "MainWindow.h"
#include <QPushButton>
#include <QVBoxLayout>
#include <QDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
mAmputationButton( new QPushButton("Amputation" ) ),
mAsthmaButton( new QPushButton("Astham" ) )
{
setWindowTitle("First Aid");
QWidget *sampleWidget = new QWidget();
QVBoxLayout *lay = new QVBoxLayout();
lay->addWidget(mAmputationButton);
connect(mAmputationButton, &QPushButton::clicked, this, &MainWindow::on_pushButton_clicked );
connect(mAsthmaButton, &QPushButton::clicked, this, &MainWindow::on_pushButton_clicked );
lay->addWidget(mAsthmaButton);
sampleWidget->setLayout(lay);
setCentralWidget(sampleWidget);
}
MainWindow::~MainWindow(){}
void MainWindow::on_pushButton_clicked(){
QDialog *sampleDialog = new QDialog();
sampleDialog->setModal(true);
sampleDialog->show();
}
Примечание 1: В слоте on_pushbutton_clicked
я просто создаюновый диалог и его отображение.Просто добавьте туда свою логику слота, и все будет хорошо.
Примечание 2: Желательно, чтобы все ваши соединения были в одном методе, например Initialize Connections
, как уже упоминалось выше..
Возьмите эту мини-реализацию просто как пример, над которым вы можете работать, а не использовать ее для копирования-вставки.