Обмен данными между окнами QT

Я долго пытался сделать обращение между 2-мя окнами, и сделал такой код:

mainwindow.cpp:

...
// Слот на изменения textEdit
void MainWindow::recieveData(QString str){
    ui->textEdit->setText(str);
    qDebug() << "2";

}
...
// Открытие другого окна
void MainWindow::on_action_select_theme_triggered(){

    Themes *ad = new Themes;
    ad->show();
}

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

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 recieveData(QString str);

private slots:
    void on_action_select_theme_triggered();

public:
    Ui::MainWindow *ui;


};
#endif // MAINWINDOW_H

themes.cpp:

...
Themes::Themes(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Themes)
{



    ui->setupUi(this);





    QStringList strings;
    strings << "Дефолт" << "Dark Theme" << "Sea Theme";


    ui->listWidget->addItems(strings);


    MainWindow * dialog2 = new MainWindow(this);

    qDebug() << "1";

    // emit signalFromDialog("Test text");
    connect(this,SIGNAL(signalFromDialog(QString)),dialog2,SLOT(recieveData(QString))
    emit signalFromDialog("Test text");
    );
    ...

}

themes.h:

#ifndef THEMES_H
#define THEMES_H

#include <QWidget>

namespace Ui {
class Themes;
}

class Themes : public QWidget
{
    Q_OBJECT

public:
    explicit Themes(QWidget *parent = nullptr);
    ~Themes();


signals:
    void signalFromDialog(QString str);


private slots:
    void on_Button_GetItem_clicked();

private:
    Ui::Themes *ui;
};

#endif // THEMES_H

При этом в консоль выводиться 2, которую я вызываю через qDebug() << "2";, но, несмотря на это, действие ui->textEdit->setText(str); почему-то не выполняется, как можно сделать исправить код, чтоб изменить из themes.cpp, textEdit из mainwindow.cpp ?


Ответы (1 шт):

Автор решения: Lev145

Я реализовал connect в классе главного окна + немного изменил код и всё заработало:

...
void MainWindow::on_action_select_theme_triggered(){

    Themes *ad = new Themes;

    connect(ad,SIGNAL(signalFromDialog(QString)),this,SLOT(recieveData(QString)));
    ad->show();
}

Помогло: https://www.cyberforum.ru/qt/thread1795952.html

→ Ссылка