Classes communication / signal slot generates duplicate connection error
-
You can't pass parameters in connect statements (please take some time to read the "Signals And Slots" chapter in Qt's documentation.
What's the use of Dialog2 ? Get a string from the user ? Then call exec on the dialog. Check it's return value. If it's okay then call directly addNewTab retrieving the string from Dialog2 through a getter.
-
hi,
when I simplified my test example I missed a detail. sorry for this, a lot of effort has already been put in this thread: in mainWindow I have an action when triggered, opens dialog1. In dialog1 is the pushButton that should open dialog2. maybe this makes sense. how is this scenario changes the output.bq. You can’t pass parameters in connect statements (please take some time to read the “Signals And Slots” chapter in Qt’s documentation.
understood from Signals and Slots.
below my code from mainWindow.h and .cpp. the rest remains as in my previous post - entire code.
@//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTabWidget>
#include "dialog1.h"
#include "dialog2.h"
#include <QMessageBox>
#include <QString>
#include <QWidget>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();private:
Ui::MainWindow *ui;private slots:
void addNewTab(QWidget * page, QString & title)
{
QTabWidget *newTab = new QTabWidget;setCentralWidget(newTab); // only for testing, otherwise generates one single tab always. previous post newTab->addTab(page, title); newTab->setTabsClosable(true); } void on_actionDialog1_triggered();
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog1.h"
#include "dialog2.h"
#include <QTabWidget>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Dialog1 *d1 = new Dialog1;
Dialog2 *d2 = new Dialog2;//here should come the connect function that connects dialog1 to open a dialog2 in mainwindow tabWidget. this is generating my problem.
}
MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_actionDialog1_triggered()
{
QString titled1 = "title d1";
Dialog1 *d1 = new Dialog1;
addNewTab(d1, titled1);
}@ -
If Dialog2 is open within Dialog1, what does it do in MainWindow ?
-
What does Dialog1 contain ? How should it be shown ?
-
thank you for your feedback,
@//dialog1.cpp
#include "dialog1.h"
#include "ui_dialog1.h"
#include "mainwindow.h"Dialog1::Dialog1(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog1)
{
ui->setupUi(this);
Dialog2 *d2 = new Dialog2;
QString titled2 = "title d2";connect(this, SIGNAL(on_pushButton_clicked()), d2, SLOT()); // and the slot should be the function defined that adds a new tab in the tabWidget
}Dialog1::~Dialog1()
{
delete ui;
}//dialog1.h
#ifndef DIALOG1_H
#define DIALOG1_H#include <QDialog>
#include <QTabWidget>namespace Ui {
class Dialog1;
}class Dialog1 : public QDialog
{
Q_OBJECTpublic:
explicit Dialog1(QWidget *parent = 0);
~Dialog1();signals:
void on_pushButton_clicked();private:
Ui::Dialog1 *ui;
};#endif // DIALOG1_H
//and the function addNewTab is defined in dialog2.h
//dialog2.h
#ifndef DIALOG2_H
#define DIALOG2_H#include <QDialog>2
#include <QTabWidget>namespace Ui {
class Dialog2;
}class Dialog2 : public QDialog
{
Q_OBJECTpublic:
explicit Dialog2(QWidget *parent = 0);
~Dialog2();private slots:
void addNewTab(QWidget * page, QString & title)
{
QTabWidget *newTab = new QTabWidget;// setCentralWidget(newTab); newTab->addTab(page, title); newTab->setTabsClosable(true); }
signals:
void on_pushButton_clicked();private:
Ui::Dialog2 *ui;
};#endif // DIALOG2_H@
-
Why does Dialog1 create a Dialog2 instance ?
Why does Dialog2 create a QTabWidget ?You are mixing together everything. If something done in Dialog1 should trigger something in MainWindow then it should not happen in Dialog2.
You should do some sketches of what each widget of your application should do. Are you sure you need all these dialogs ?
-
thanks for your input. I have the impression that I'm mixing all. let's say dialog1 it's a window with some widgets in, and dialog2 it's a filter, or son of the dialog1.
all windows are opened in mainWindow in tabWidget.as soon as dialog1.pushButton is trigged, the dialog2 opens in a new tab in mainWindow. this is what should happened.
-
Are you trying to create some sort of wizard ?