티스토리 뷰



QT 응용 프로그램을 우분투 리눅스에서 개발하다가 중간중간에 이상한 경고 메시지를 만나게 되었다.

 

"Gtk-Message: 14:16:49.392: GtkDialog mapped without a transient parent. This is discouraged." 메시지 내용을 보면 내가 프로그램을 작성을 하면서 뭔가를 잘못한 것 같은데....... 하는 추측을 하게 한다. 문제를 해결하려면 일단 현상을 재현하는 것이 중요하므로 언제 이 경고 메시지가 나오는지 여러 번 테스트를 진행했다.

 

드디어 현상이 재현 되었는데, 알고 보니 위의 그림과 같은 색상 선택창을 띄울 때마다 발생하고 있었다. 폰트 선택이나 색상 선택처럼 QT 대화창을 통해서 값을 선택받고자 하는 경우에 이런 현상이 발생하는데, 

 

    QColorDialog clr_dlg(WdgShape::getColor(editobj->text().toStdString()), owner());
    clr_dlg.setOption(QColorDialog::ShowAlphaChannel);
    if (clr_dlg.exec() && clr_dlg.selectedColor().isValid()) {
        if (clr_dlg.selectedColor().alpha() >= 255)
            editobj->setText(clr_dlg.selectedColor().name());
        else
            editobj->setText(clr_dlg.selectedColor().name() + "-" + QString::number(clr_dlg.selectedColor().alpha()));
        QPalette pal = lblobj->palette();
        pal.setColor(QPalette::Window, clr_dlg.selectedColor());
        lblobj->setPalette(pal);
    }

코드를 보면 대화창을 생성할 때 넘겨주는 부모창의 핸들이 잘못된 것 아닌가 하고 한참을 고민했지만 도무지 해결되지 않았다. 그러다가 찾은 해결책, 아니 우회로는 운영체제의 선택 창이 아니라 QT 자체의 대화창을 사용하도록 선택하는 옵션을 지정하는 것이었다.

 

대화창을 생성하고 옵션을 지정할 때 clr_dlg.setOption(QColorDialog::DontUseNativeDialog); 처럼 옵션을 추가로 지정하면 위의 그림처럼 QT 자체의 대화창이 나오면서 경고 문구는 더 이상 나오지 않는다.

 

이 방법은 파일 열기과 폰트 선택 대화창에서도 적용할 수 있다.

 

 

 


댓글
댓글쓰기 폼