Как в qt передать текст из одного окна в другое с помощью механизма сигналов и слотов?

Я пытался реализовать это через указатели: все работало. С меня преподаватель требует сделать это через механизм сигналов и слотов. А я хоть убей, но не понимаю, как это сделать, по крайней мере, как передать текст из окна в окно (сделал вызов второго по кнопке). Нужно во втором окне выводить в label "Приветствую вас, +введенное имя из 1 окна. Помогите, пожалуйста. В редакторе в первом окне кнопка и lineedit, а во втором label

Код: anotherwindow.h

#ifndef ANOTHERWINDOW_H
#define ANOTHERWINDOW_H

#include <QDialog>
#include <QString>

namespace Ui {
class anotherWindow;
}

class anotherWindow : public QDialog
{
    Q_OBJECT

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

private:
    Ui::anotherWindow *ui;
};



#endif // ANOTHERWINDOW_H

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "anotherwindow.h"
#include <QDialog>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

   // И создадим указатель на нашу будущую форму:

private slots:
    void on_pushButton_clicked();

private:
        anotherWindow *my2window;

private:
    Ui::MainWindow *ui;
};


#endif // MAINWINDOW_H

anotherwindow.cpp

#include "anotherwindow.h"
#include "ui_anotherwindow.h"


anotherWindow::anotherWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::anotherWindow)
{
    ui->setupUi(this);
}

//void anotherWindow::recieveData(QString)
//{
//ui->label->setText;
//}

anotherWindow::~anotherWindow()
{
    delete ui;
}
//anotherWindow

main cpp не тронуто

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    my2window = new anotherWindow(); // создаем нашу форму
}
MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
     connect(ui->pushButton, SIGNAL(clicked()), my2window, SLOT(show())); // подключаем сигнал к слоту
}

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

Автор решения: Sergey Tatarincev

вариантов много. например так:

anotherwindow.h

public:
...
private:
...
signals: // тут задаются сигнатуры сигналов
void mySig(QString text); // у нас сигнал называется mySig с параметром QString
private slots: // тут описываются слоты с обработкой сигнала
    slotMySig(QString text);

mainwindow.h

public:
...
private:
...
signals:
void mySig(QString text);

anotherwindow.cpp

anotherWindow::anotherWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::anotherWindow)
{
    ui->setupUi(this); 
    connect(this,SIGNAL(mySig(QString)),this,SLOT(slotMySig(QString))); // привязываем сигнал этого объекта в слоту в этом же объекте

}
anotherWindow::slotMySig(QString text){
 QMessageBox::information(this,"yeah! we get text",text); // в слоте выведем полученный посредством сигнала текст
}

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    my2window = new anotherWindow(); // создаем нашу форму
    connect(this,SIGNAL(mySig(QString)),my2window,SIGNAL(mySig(QString))); // сигнал из главного окна будет эмитировать сигнал во втором окне 

    emit mySig("бамжур камфитюр"); // эмитируем наш сигнал. по этому сигналу будет автоматом эмитироваться сигнал во втором окне, а там уже сигнал подвязан к слоту    
}

Можно связывать и сигнал со слотом и сигнал с сигналом, и сигнал одного объекта со слотом другого.
Почитайте документацию. Найдете массу вариантов.

→ Ссылка