반응형
테스트 환경
Windows10 / C++ / Qt 5.15.2 / Qt Creator 4.13.3
목적
Qt Creator를 활용, 다이얼로그에서 메인윈도우로부터 전달받은 데이터를 출력한다.
다이얼로그로 데이터 전달
다이얼로그 생성
아래 글을 참고하여 다이얼로그를 만든다. 다이얼로그는 모달, 모달리스 둘 다 상관없지만 아래 예제는 모달방식으로 구현되어있다.
mainwindow.h
MainWindow 클래스에 아래 라인을 추가한다.
signals:
void Send(int data);
Qt에서 클래스간 통신은 signal과 slot으로 이루어진다. signal은 데이터를 송신, slot은 수신하는 함수다. signal과 slot의 파라미터 자료형을 같게 하여 signal 함수의 파라미터 값을 slot 함수 파라미터 값으로 복사하는 방식으로 데이터가 이동된다. 위 코드에서 signal로 등록된 Send함수는 MainWindow에서 Dialog 클래스로 데이터를 보낼 함수다.
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "dialog.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
Dialog *dialog;
signals: // 추가
void Send(int data); // 추가
};
#endif // MAINWINDOW_H
dialog.h
Dialog 클래스에 아래 라인을 추가한다.
private slots:
void Receive(int data);
Dialog 클래스에서 데이터를 받을 함수는 Receive로 선언한다.
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = nullptr);
~Dialog();
private:
Ui::Dialog *ui;
private slots: // 추가
void Receive(int data); // 추가
};
#endif // DIALOG_H
mainwindow.cpp
mainwindow.cpp에 아래 라인을 추가한다.
connect(this, SIGNAL(Send(int)), dialog, SLOT(Receive(int)));
connect 함수는 만들어둔 Send 함수와 Receive 함수를 등록한다.
connect(보낼 클래스, SIGNAL(보낼 함수(파라미터), 받을 클래스, SLOT(받을 함수(파라미터)))
emit Send(999);
emit을 사용하여 Send함수의 파라미터를 송신한다. 다이얼로그에 999를 송신한다.
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
dialog = new Dialog ;
connect(this, SIGNAL(Send(int)), dialog, SLOT(Receive(int))); // 추가
emit Send(999); // 추가
dialog->setModal(true);
dialog->exec();
}
MainWindow::~MainWindow()
{
delete ui;
}
dialog.cpp
Receive함수를 구현한다.
void Dialog::Receive(int data)
{
qDebug() << data;
}
mainwindow.cpp에서 emit Send(999)가 수행되면 Receive 함수가 수행된다. Receive함수는 999를 출력한다.
#include "dialog.h"
#include "ui_dialog.h"
#include "QDebug"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::Receive(int data)
{
qDebug() << data;
}
최근댓글