내 응용 프로그램 중 하나에서 Qt 대화 상자를 사용하고 있습니다. 도움말 버튼을 숨기거나 삭제해야합니다. 그러나 나는 그의 도움말 버튼에 대한 핸들을 정확히 찾을 수 없습니다. Qt 창에서 특정 플래그인지 확실하지 않습니다.
답변:
기본적으로 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 열거 형 에서 찾을 수 있습니다 .
Qt::WindowCloseButtonHint
닫기 버튼을 활성화 하려면 플래그를 추가하십시오 .
QtCore.Qt.WindowCloseButtonHint
제거했습니다 QtCore.Qt.WindowTitleHint
. 플래그 설정이 기본 플래그를 재정의한다고 가정하므로 원하는 모든 플래그를 지정해야합니다.
// 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);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
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 예제를 가지고 놀았습니다. 감사!
응용 프로그램의 모든 대화 상자에 대해 기본적으로 물음표를 제거하는 다음 방법을 사용할 수 있습니다.
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);
}