728x90

ui에서 다른 ui를 띄워서 사용하는 방법에 대해 소개하겠습니다.

 

먼저 상단 바의 File > New File or Project.. > Qt Designer Form Class 를 선택합니다.

다음으로 Form Template에서 Widget을 선택 후 Next > 를 선택합니다.

파일 이름을 선택 후 Next > 를 선택 후 Finish를 해줍니다.

popupwindow.ui를 만들었다면 main ui의 헤더파일에 아래처럼 코드를 추가합니다.

#include "popupwindow.h"

namespace UI {
class MainWindow;
}

class MainWindow : public QMainWQindow
{
	Q_OBJECT

public:
	void showPopup();	// 팝업 띄우는 함수
    ... 
    
private:
	popupwindow* popupwindows;
};

cpp 파일 안에는 ui를 띄우려는 함수나 코드에 아래처럼 코드를 추가합니다. move 함수를 이용해서 띄워지는 팝업 윈도우를 화면의 중앙에 위치하게 할 수 있습니다.

void MainWindow::showPopup()
{
    popupwindows = new popupwindow(this);
    popupwindows->move(
    		QApplication::desktop()->screen()->rect().center()
                - popupwindows->rect().center());	// 팝업 화면을 화면 가운데 띄워줌
    popupwindows->show();	// 팝업 띄움
}

두 ui 간에 데이터를 교환하고 싶을 때는 signal / slot을 이용해야 합니다. popupwindow에서 emit으로 시그널을 발생시키고 mainwindows에서 connect로 시그널을 읽어 처리해야 합니다.

 

popupwindow.h 입니다. qbutton을 클릭 시 on_button_clicked() 함수가 호출되고 sendValue()라는 시그널을 만듭니다.

#include <QMainWindow>
...

namespace UI {
class popupwindow;
}

class popupwindow : public QWidget
{
	Q_OBJECT

	...
private slots:
	void on_button_clicked();	// qbutton 클릭 시 호출되는 함수

signals:
	void sendValue(int value);
};

popupwindow.cpp 입니다. emit으로 sendValue라는 발생합니다.

void popupwindow::on_button_clicked()
{
	emit sendValue(value);
}

이제 다시 mainwindow로 돌아와 시그널을 받았을 수 있게 connect 함수를 사용하고 받은 데이터를 처리할 함수를 정의합니다.

#include "popupwindow.h"

namespace UI {
class MainWindow;
}

class MainWindow : public QMainWQindow
{
	Q_OBJECT

public:
    void showPopup();		// 팝업 띄우는 함수
    ... 
private slots:
	void setValue(int value);	// 받은 데이터 처리
private:
	popupwindow* popupwindows;
};
void MainWindow::showPopup()
{
    popupwindows = new popupwindow(this);	// 먼저 생성
    connect(popupwindows, SIGNAL(sendValue(int), this, SLOT(setValue(int));
    popupwindows->move(
    		QApplication::desktop()->screen()->rect().center()
                - popupwindows->rect().center());	// 팝업 화면을 화면 가운데 띄워줌
    popupwindows->show();		// 팝업 띄움
}

마지막으로 popup을 닫기 위해서는 close 함수를 사용하면 됩니다.

void popupwindow::closepopup()
{
	popupwindow::close();
}
728x90

'Programming > Qt' 카테고리의 다른 글

Mainwindow 파일이 아닌 다른 cpp에서 ui 접근  (0) 2020.06.05
QLayout에 있는 위젯 삭제하기  (0) 2020.05.24
QPushButton 이미지 넣기  (2) 2020.04.14
Qt 커스텀 위젯 사용하기  (0) 2020.04.10
Qt 클릭 이벤트 만들기  (0) 2020.04.10

+ Recent posts