Подход – добавить публичные геттеры для данных в форму, которые хочет потреблять родительская форма.
Допустим, родительская форма хочет показывать сообщение с количеством лет, которые человек ввел на дочерней форме.
Добавим геттер для возраста.
InputAgeDialog.h:
#ifndef INPUTAGEDIALOG_H
#define INPUTAGEDIALOG_H
#include <QDialog>
namespace Ui {
class InputAgeDialog;
}
class InputAgeDialog: public QDialog
{
Q_OBJECT
public:
explicit InputAgeDialog(QWidget *parent = 0);
~ InputAgeDialog ();
void Initialize(int age);
int GetAge() const;
private:
Ui::InputAgeDialog *ui;
};
#endif // INPUTAGEDIALOG_H
InputAgeDialog.cpp:
#include "inputagedialog.h"
#include "ui_inputagedialog.h"
InputAgeDialog::InputAgeDialog(QWidget *parent):
QDialog(parent),
ui(new Ui::InputAgeDialog)
{
ui->setupUi(this);
}
void InputAgeDialog::Initialize(int age)
{
ui->m_inputTextLineEdit->setText(QString::number(age));
}
InputAgeDialog::~ InputAgeDialog ()
{
delete ui;
}
Int InputAgeDialog::GetAge() const
{
return ui->m_inputTextLineEdit->text().toInt();
}
MainWindow.h
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include "inputagedialog.h"
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~ MainWindow ()
{
delete ui;
}
void MainWindow::on_m_okPushButton_clicked()
{
InputAgeDialog dialog(this);
dialog.Initialize(18);
dialog. exec ();
int age = dialog.GetAge();
QMessageBox::information(this, "Возраст - CoolApplication", tr("Возраст %1").arg(age));
}
Как обработать ситуацию, когда диалог закрыли, не нажав на ОК
Например, не хочется ничего делать, пока диалог не закроют с нажатием на ОК.
void MainWindow::on_m_okPushButton_clicked()
{
InputAgeDialog dialog(this);
dialog.Initialize(18);
if (dialog. exec () == QDialog::DialogCode::Accepted)
{
int age = dialog.GetAge();
QMessageBox::information(this, "Возраст - CoolApplication", tr("Возраст %1").arg(age));
}
}
Если в диалоге не используются стандартные кнопки, а используются свои собственные, то диалог может вызвать метод Accept(): тогда он самозакроется с результатом выполнения Accepted.