Program Club

"?"를 숨기거나 삭제하려면 어떻게해야합니까?

proclub 2020. 11. 3. 19:27
반응형

"?"를 숨기거나 삭제하려면 어떻게해야합니까? Qt 대화 상자의 "제목 표시 줄"에있는 도움말 버튼?


내 응용 프로그램 중 하나에서 Qt 대화 상자를 사용하고 있습니다. 도움말 버튼을 숨기거나 삭제해야합니다. 그러나 나는 그의 도움말 버튼에 대한 핸들을 정확히 찾을 수 없습니다. Qt 창에서 특정 플래그인지 확실하지 않습니다.


기본적으로 Qt :: WindowContextHelpButtonHint 플래그가 대화 상자에 추가됩니다. 대화 생성자에 대한 WindowFlags 매개 변수를 사용하여 이를 제어 할 수 있습니다 .

예를 들어 다음 을 수행 하여 TitleHintSystemMenu 플래그 만 지정할 수 있습니다 .

QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();

Qt :: WindowContextHelpButtonHint 플래그 를 추가하면 도움말 버튼이 다시 표시됩니다.

PyQt에서는 다음을 수행 할 수 있습니다.

from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()

창 플래그에 대한 자세한 내용 은 Qt 문서 WindowType 열거 형 에서 찾을 수 있습니다 .


// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);

좋아, 나는 이것을 할 방법을 찾았다.

Window 플래그를 처리합니다. 그래서 내가 사용한 코드는 다음과 같습니다.

Qt::WindowFlags flags = windowFlags()

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   
setWindowFlags(flags);

그러나 이렇게하면 때때로 대화 상자의 아이콘이 재설정됩니다. 따라서 대화 상자의 아이콘이 변경되지 않도록 두 줄을 추가 할 수 있습니다.

QIcon icon = windowIcon();

Qt::WindowFlags flags = windowFlags();

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   

setWindowFlags(flags);

setWindowIcon(icon);

Qt 5.10부터는 단일 QApplication속성 으로 이러한 버튼을 전역 적으로 비활성화 할 수 있습니다 !

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);

Windows 7, Qt 5.2에서이 문제가 발생했으며 나에게 가장 적합한 플래그 조합은 다음과 같습니다.

Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint

이것은 작동하는 닫기 버튼을 제공하지만 물음표 도움말 버튼은 없습니다. Qt :: WindowTitleHint 또는 Qt :: WindowSystemMenuHint 만 사용하면 도움말 버튼이 제거되었지만 닫기 버튼도 비활성화되었습니다.

Michael Bishop이 제안했듯이이 조합으로 이끄는 windowflags 예제를 가지고 놀았습니다. 감사!


여기에 나열된 답변은 작동하지만 직접 답변하려면 예제 프로그램을 실행하는 것이 좋습니다 $QTDIR/examples/widgets/windowflags. 이를 통해 창 플래그 및 그 효과의 모든 구성을 테스트 할 수 있습니다. squirrelly windowflags 문제를 파악하는 데 매우 유용합니다.


응용 프로그램의 모든 대화 상자에 대해 기본적으로 물음표를 제거하는 다음 방법을 사용할 수 있습니다.

다음 이벤트 필터를 QApplication프로그램 시작 위치에 연결하십시오 .

  bool eventFilter (QObject *watched, QEvent *event) override
  {
    if (event->type () == QEvent::Create)
      {
        if (watched->isWidgetType ())
          {
            auto w = static_cast<QWidget *> (watched);
            w->setWindowFlags (w->windowFlags () & (~Qt::WindowContextHelpButtonHint));
          }
      }
    return QObject::eventFilter (watched, event);
  }

슬롯을 찾을 수 없지만 가상 winEvent기능을 재정의 할 수 있습니다 .

#if defined(Q_WS_WIN)
bool MyWizard::winEvent(MSG * msg, long * result)
{
    switch (msg->message)
    {
    case WM_NCLBUTTONDOWN:
        if (msg->wParam == HTHELP)
        {

        }
        break;
    default:
        break;
    }
    return QWizard::winEvent(msg, result);
}
#endif

참고 URL : https://stackoverflow.com/questions/81627/how-can-i-hide-delete-the-help-button-on-the-title-bar-of-a-qt-dialog

반응형