반응형
- QWidget과 QDialog의 사용 용도
- QWidget : 보통의 윈도우창.(임베디드환경제외) 보통 윈도우창이라고하면 프레임도 있고 상단에 타이틀 바도 있는 모습
- QDialog : 대개 짧은 기간의 일을 처리할 때 사용되는 창 (예: 메시지 팝업창, 경고창 등)
- 윈도우에서 띄우는 방법
- QWidget: show() 함수를 통해 화면을 띄울 수 있다. -> modeless
- QDialog: exec() 함수를 통해 화면을 띄울 수 있다. -> modal이다.
- Modal / Modeless 개념
modal 과 modeless 는 윈도우에 창을 띄울 때 사용되는 개념이다.
- modal : modal 속성으로 창을 띄우면 해당 창이 윈도우에서 가장 top-level에 띄워지게 된다. 그리고 다른 창에 접근하지 못한다.
- modeless : modeless 속성으로 창을 띄우면 어플리케이션의 다른 창에 접근도 가능하고 다른 창에서 이벤트 수신도 가능하다.
예를 들면 modal은 경고팝업창으로 사용자가 무조건 확인후에 다음 스텝으로 넘어갈 수 있고, modeless 는 해당 창을 무시하고 다른 작업을 이어서 할 수 있다.
- QDialog 코드 예시
위에서 QDialog는 modal 이라고 설명했으나 사실은 modeless 로도 구현이 가능하다.
보통은 modal 형식으로 많이 사용된다.
modal dialog:
void EditorWindow::countWords()
{
WordCountDialog dialog(this);
dialog.setWordCount(document().wordCount());
dialog.exec();
}
modeless dialog:
void EditorWindow::find()
{
if(!findDialog)
{
findDialog = new FindDialog(this);
connect(findDialog, &FindDialog::findNext, this, &EditorWindow::findNext);
}
findDialog->show();
findDialog->raise(); // 시각적으로 window에서 가장 top-level에 보여지도록 한다.
findDialog->activateWindow(); // 키보드 이벤트 같은 이벤트를 받을 때 가장 먼저 해당 다이얼로그로 오도록 한다.
}
반응형