Как в 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 шт):
вариантов много. например так:
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("бамжур камфитюр"); // эмитируем наш сигнал. по этому сигналу будет автоматом эмитироваться сигнал во втором окне, а там уже сигнал подвязан к слоту
}
Можно связывать и сигнал со слотом и сигнал с сигналом, и сигнал одного объекта со слотом другого.
Почитайте документацию. Найдете массу вариантов.