할 수 있는 방법을 숨기/삭제"?"데 도움이 버튼에"제목 표시줄의"Qt 대화?

StackOverflow https://stackoverflow.com/questions/81627

  •  09-06-2019
  •  | 
  •  

문제

내가 사용하는 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_()

더 많은 정보에 창의 플래그에서 찾을 수 있습니다 WindowType enum 에서는 Qt 문서입니다.

다른 팁

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

Ok,나는 방법을 발견했습니다.

그것은 거래를 창 플래그입니다.그래서 여기에 코드를 사용:

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

계로서 이 문제는 윈도우 7,Qt5.2 며,이 플래그는 조합을 위해 최선을 다했다 나는 이것이었습니다:

Qt::WindowTitleHint|Qt::WindowCloseButtonHint

이런 작업 닫기 버튼 하지만 질문을 표시합니다.를 사용하여 Qt::WindowTitleHint 또는 Qt::WindowSystemMenuHint 거에 도움의 버튼이지만,그것은 또한 장애인 닫기 버튼입니다.

으로 마이클 주교는 제안,그것을 가지고 놀고 있었 windowflags 예제는 나를 지도했습니다.감사합니다!

로 Qt5.10 비활성화할 수 있습니다 이 버튼을 세계적으로 단일 QApplication 특성!

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);

대한 답변 여기에 나열된 작동하지만 그것을 대답하신 것이 좋습 예제를 실행하는 프로그램 $QTDIR/examples/widgets/windowflags.할 수 있는 테스트는 모든 구성은 창의 플래그와 그들의 효과.매우 유용하는 방법을 알아내는 미친 사람 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top