한글을 Widget에 표시할 때 한글 깨짐 문제가 발생한다.
Qt Creator에서 Widget을 만든 후, 한글을 넣을 때는 상관없지만 소스 코드에서 한글을 넣게 되면 한글 깨짐이 나타난다.
Qt 한글 깨짐 문제 관련해서 게시물이 많다.
게시물을 작성한 분은 해결한 후 작성했겠지만, 문제 해결에 큰 도움이 되지는 않았다.
그러던 도중 좋은 게시물을 하나 찾았다.
https://thirdnsov.github.io/programming/2021/10/10/P_Qt_Korean.html
리눅스에서도 괜찮은 한글 문제가 윈도우즈에서 왜 나타나는지 의문이었는데 컴파일러에 대한 부분을 간과하고 있었다. 만약 MSVC가 아닌 MinGW를 사용하고 있었다면 한글 사용에 큰 문제가 없었을 것이다.
각설하고 코드를 보자.
일단, 한글을 사용하기 때문에 당연히 파일은 UTF-8 형식을 사용한다.
한글을 사용하는 방법이 많은데, 맞는 방법이건 틀린 방법이건 아래 방법 모두 MSVC에서 기본적으로 깨진다. 어쨌든 모두 해보자.
void MainWindow::on_pushButton_clicked()
{
ui->label->setText("[1] 우리나라");
qDebug() << "[1] : " << ui->label->text();
ui->label_2->setText("[2] " + QString::fromUtf8("우리나라"));
qDebug() << "[2] : " << ui->label_2->text();
ui->label_3->setText("[3] " + QString(QString::fromLocal8Bit("우리나라").constData()));
qDebug() << "[3] : " << ui->label_3->text();
ui->label_4->setText("[4] " + QString::fromLatin1("우리나라"));
qDebug() << "[4] : " << ui->label_4->text();
QTextCodec* codec5 = QTextCodec::codecForName("EUC-KR");
ui->label_5->setText("[5] " + codec5->toUnicode("우리나라"));
qDebug() << "[5] : " << ui->label_5->text();
QTextCodec* codec6 = QTextCodec::codecForName("UTF-8");
ui->label_6->setText("[6] " + codec6->toUnicode("우리나라"));
qDebug() << "[6] : " << ui->label_6->text();
ui->label_7->setText("[7] " + codec6->toUnicode(qPrintable(QString::fromUtf8("우리나라"))));
qDebug() << "[7] : " << ui->label_7->text();
fprintf(stderr, "[10] : %s\n", QString::fromUtf8("우리나라").toLocal8Bit().constData());
fprintf(stderr, "[11] : %s\n", qPrintable(QString::fromUtf8("우리나라")));
}
이런...
모두 깨져 나온다.
MSVC에서 utf-8 처리가 가능하도록 .pro 파일에 다음과 같이 추가한다. MinGW일 때는 인식되지 않는 내용으로 msvc일 때로 한정한다.
win32-msvc* {
QMAKE_CXXFLAGS += /utf-8
}
이제 실행하면 아래와 같이 나온다. 한글이 제대로 표시된 곳은 처리 방식에 문제가 없는 것이고 깨진 부분은 한글 처리에 문제가 있는 방식이다.
참고로, [10][11]은 printf()를 사용하여 출력한 예시다.
한글 깨짐 문제 또한 다양한 방법이 있겠지만, 옵션 변경을 통해 간단히 해결하는 것도 좋은 방법이지 않을까 한다. 이런 문제 간단히 처리하고 남는 시간에 독서나 합니다. ^^
소스코드가 구리고 지저분하지만 필요한 분은 다운로드 ㅎㅎ
'놀기 > Qt' 카테고리의 다른 글
QT에서 Ping 명령어 실행하기 (0) | 2023.09.24 |
---|---|
QT에서 SendMessage() 사용하기 (0) | 2023.09.09 |
USB 저장 장치 제거하기 (How to eject an external drive or USB stick) (0) | 2023.09.05 |
[Qt] Widget 크기에 맞게 폰트 조절하기 (feat. QLabel을 QPixmap으로 변환) (0) | 2023.08.27 |
[Qt] QMovie로 gif 재생이 안 될 때 ..... (0) | 2023.08.07 |
댓글