it-swarm-ko.tech

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

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

69
AMM

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

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

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 enum 에서 찾을 수 있습니다.

61
amos
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
37
Jens A. Koch

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

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);
31
AMM

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

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);
15
Parker Coates

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

Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint

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

Michael Bishop이 제안했듯이 windowflags 예제를 사용 하여이 조합을 이끌어 냈습니다. 감사!

13
rrwick

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

4
Michael Bishop

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

다음 이벤트 필터를 프로그램 시작 위치의 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);
  }
2
Predelnik

슬롯을 찾을 수 없지만 가상 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
0
brandoneggar