다이얼로그는 어플리케이션이 동작 중에 이벤트가 발생했을 때 사용자에게 메시지를 전달하기 위한 목적으로 사용된다. 그리고 사용자로부터 입력 값을 받거나 여러 개 중 하나를 선택할 수 있는 GUI를 제공한다.
종류 | 설명 |
QInputDialog | 사용자로부터 값을 입력 받을 수 있는 다이얼로그 |
QColorDialog | 특정 컬러를 선택할 수 있는 다이얼로그 |
QfileDialog | 파일 또는 디렉토리를 선택하는 GUI 인터페이스를 제공 |
QFontDialog | 폰트를 선택하기 위한 다이얼로그 |
QProgressDialog | 퍼센트와 같은 진행사항을 보여주기 위한 다이얼로그 |
QMessageBox | 모달 방식의 다이얼로그 |
QInputDialog
QInputDialog 클래스는 사용자로부터 값을 입력 받을 수 있다.
getInt( ) 멤버 함수
QInputDialog 클래스의 getInt( ) 멤버 함수는 사용자로부터 정수 값을 입력 받을 수 있는 다이얼로그를 제공한다.
bool retValue;
int i = QInputDialog::getInt(this, "정수입력", "퍼센트:",
25, 0, 100, 1, &retValue);
if (retValue)
qDebug("true %d", i);
getDouble( ) 멤버 함수
QInputDialog 클래스의 getDouble( ) 멤버 함수는 실수 값을 입력 받을 수 있다.
bool retValue;
double dVal = QInputDialog::getDouble(this, "실수 입력", "값 입력:",
48.56, -100, 100, 2, &retValue);
getItem( ) 멤버 함수
QStringList items;
items << "봄" << "여름" << "가을" << "겨울";
bool ok;
QString item = QInputDialog::getItem(this, "항목선택", "계절 선택: ",
items, 0, false, &ok);
사용 예시
<widget.h>
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QInputDialog> //다이얼 선언
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
private slots: //연결 할 슬롯 선언
void show_Dialog();
};
#endif // WIDGET_H
<widget.cpp>
#include "widget.h"
#include "./ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->button,&QPushButton::clicked, this, &Widget::show_Dialog);
}
Widget::~Widget()
{
delete ui;
}
void Widget::show_Dialog()
{
// QStringList에 계절 항목 추가
QStringList items;
items << "봄" << "여름" << "가을" << "겨울";
bool ok;
// QInputDialog를 통해 사용자에게 선택창을 표시
QString item = QInputDialog::getItem(this, "항목 선택", "계절 선택: ", items, 0, false, &ok);
if (ok && !item.isEmpty()) {
// 사용자가 선택을 했을 때, 선택된 항목을 출력 또는 처리
qDebug() << "선택된 계절:" << item;
} else {
// 사용자가 취소했거나 항목을 선택하지 않았을 때
qDebug() << "선택이 취소되었습니다.";
}
}
더보기
세부 설명:
- ok:
- 이 변수는 사용자가 다이얼로그에서 OK 버튼을 눌렀는지 여부를 나타냅니다. 만약 사용자가 OK 버튼을 눌렀다면 ok는 true가 됩니다. 그렇지 않으면 false입니다.
- !item.isEmpty():
- **item.isEmpty()**는 item이 빈 문자열인지 확인하는 함수입니다.
- 이 값이 true라면, item이 비어 있다는 뜻이고, false라면 item이 비어 있지 않다는 뜻입니다.
- **!(NOT 연산자)**는 결과를 반대로 바꿉니다. 즉, !item.isEmpty()는 **item이 비어 있지 않을 때 true**가 됩니다.
- ok && !item.isEmpty():
- 이 구문은 두 조건이 모두 참일 때만 true가 됩니다:
- 사용자가 OK 버튼을 눌렀고 (ok == true)
- item이 비어 있지 않을 때 (!item.isEmpty() == true)
- 더 쉽게 작성된 코드:
- 이 구문은 두 조건이 모두 참일 때만 true가 됩니다:
// 사용자가 OK 버튼을 눌렀는지 확인
if (ok) {
// 사용자가 선택한 값이 비어 있지 않은지 확인
if (!item.isEmpty()) {
qDebug() << "선택된 계절:" << item; // 선택된 항목 출력
} else {
qDebug() << "선택된 항목이 없습니다."; // 항목이 비어 있을 때
}
} else {
qDebug() << "선택이 취소되었습니다."; // 사용자가 취소 버튼을 눌렀을 때
}
차이점:
- 조건을 한 줄로 쓰기보다는, 단계별로 나누어서 처리했습니다.
- 각 조건에 대해 별도로 설명을 덧붙여서 논리 흐름이 명확해졌습니다.
- 초보자도 쉽게 이해할 수 있도록 가독성을 높였습니다.
getText( ) 멤버 함수
bool ok;
QString text = QInputDialog::getText(this, "텍스트 입력", "이름: ",
QLineEdit::Normal, "이름 입력", &ok);
QColorDialog
QColorDialog 클래스는 사용자가 색상표를 보고 원하는 색상을 선택하기 위한 기능을 제공한다.
QColor color;
color = QColorDialog::getColor(Qt::green, this, "컬러선택", QColorDialog::DontUseNativeDialog);
if (color.isValid())
qDebug() << Q_FUNC_INFO << "유효한 색상.";
QFileDialog
QFileDialog 클래스는 사용자로부터 파일을 선택할 수 있는 다이얼로그를 제공한다. 특정 확장자 또는 특정 파일을 필터링하여 사용자에게 보여줄 수 있다.
QFileDialog::Options options;
options = QFileDialog::DontResolveSymlinks | QFileDialog::ShowDirsOnly;
options |= QFileDialog::DontUseNativeDialog;
QString directory = QFileDialog::getExistingDirectory(this,"파일 다이얼로그", "C:", options);
- getExistingDirectory( ) 멤버 함수는 사용자로부터 디렉토리를 선택할 수 있는 기능을 제공한다.
- 첫 번째 인자는 부모 클래스, 두 번째 인자는 다이얼로그의 타이틀 바 제목, 세 번째 인자는 지정한 디렉토리가 디폴트로 지정하기 위해 사용하는 인자이다.
- 마지막인자는 파일 다이얼로그의 상수 값을 이용해 필터링하기 위한 옵션이다.
상수 | 설명 |
QFileDialog::ShowDirsOnly | 디렉토리만 표시 |
QFileDialog::DontResolveSymlinks | 심볼릭 링크를 표시히지 않기 위해 사용 |
QFileDialog::DontConfirmOverwrite | 덮어쓰기 할 때 경고 메시지를 표시하지 않기 |
QFileDialog::DontUseNativeDialog | 시스템 기본 파일 다이얼로그를 사용하지 않기 위해 사용 |
QFileDialog::ReadOnly | 읽기 모드로 파일 다이얼로그를 사용 |
QFileDialog::HideNameFilterDetails | 필터를 이용해 파일을 감추기 위해 사용 |
QFontDialog
- QFontDialog는 사용자로부터 폰트를 선택할 수 있는 다이얼로그를 제공한다.
- 첫 번째인자는 사용자가 다이얼로그 하단에 위치해 있는 [OK] 버튼과 [CANCEL] 버튼 중 어떤 버튼을 클릭했는지 확인하기 위한 변수를 지정 한다.
- 두 번째 인자는 폰트 다이얼로그 상에서 디폴트 선택으로 지정할 수 있는 폰트를 지정한다.
bool ok;
QFont font;
font = QFontDialog::getFont(&ok, QFont( "Courier 10 Pitch" ), this);
QProgressDialog
QProgressDialog 클래스는 사용자에게 현재 진행 사항을 보여주기 위한 목적으로 사용한다.
<widget.h>
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QProgressDialog>
#include <QTimer>
namespace Ui { class Widget; }
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
QProgressDialog *pd;
QTimer *timer;
int steps;
public slots:
void perform();
void cancel();
};
#endif // WIDGET_H
<widget.cpp>
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
steps = 0;
pd = new QProgressDialog("파일 복사 진행사항", "취소", 0, 100);
connect(pd, SIGNAL(canceled()), this, SLOT(cancel()));
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(perform()));
timer->start(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::perform()
{
pd->setValue(steps);
steps++;
if (steps > pd->maximum())
timer->stop();
}
void Widget::cancel()
{
timer->stop();
}
QMessageBox
상수 | 값 | 설명 |
QMessageBox::Ok | 0x00000400 | OK 버튼 |
QMessageBox::Open | 0x00002000 | 파일 열기 버튼 |
QMessageBox::Save | 0x00000800 | 저장 버튼 |
QMessageBox::Cancel | 0x00400000 | 취소 버튼 |
QMessageBox::Close | 0x00200000 | 닫기 버튼 |
QMessageBox::Discard | 0x00800000 | 저장하지 않고 버리기 버튼 |
QMessageBox::Apply | 0x02000000 | APPLY 버튼 |
QMessageBox::Reset | 0x04000000 | RESET 버튼 |
QMessageBox::RestoreDefaults | 0x08000000 | 다시 저장하기 버튼 |
상수 | 값 | 설명 |
QMessageBox::Help | 0x01000000 | 도움말 버튼 |
QMessageBox::SaveAll | 0x00001000 | 모두 저장하기 버튼 |
QMessageBox::Yes | 0x00004000 | YES 버튼 |
QMessageBox::YesToAll | 0x00008000 | 모두 YES 적용하기 버튼 |
QMessageBox::No | 0x00010000 | NO 버튼 |
QMessageBox::NoToAll | 0x00020000 | 모두 NO 적용하기 버튼 |
QMessageBox::Abort | 0x00040000 | 중지 버튼 |
QMessageBox::Retry | 0x00080000 | 재시도 버튼 |
QMessageBox::Ignore | 0x00100000 | Ignore(무시) 버튼 |
QMessageBox::NoButton | 0x00000000 | An invalid button |
QMessageBox 클래스를 이용해 [Abort] 버튼, [Retry] 버튼, [Ignore] 버튼을사용하기 위한 예제이다.
11장에서 풀어보라 하는 사용자 설정 예제는 시간이 나면 해결해보도록 하고, 일단 넘어가겠다.
'Qt프로그램' 카테고리의 다른 글
Container Classes (1) | 2024.10.08 |
---|---|
QMainWindow 를 이용한 GUI 구현 (1) | 2024.10.08 |
Qt Designer 를 이용한 GUI 설계 (3) | 2024.10.08 |
Signal and Slot (1) | 2024.10.08 |
Layout (0) | 2024.10.08 |
댓글