"?"를 숨기거나 삭제하려면 어떻게해야합니까? Qt 대화 상자의 "제목 표시 줄"에있는 도움말 버튼?
내 응용 프로그램 중 하나에서 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 열거 형 에서 찾을 수 있습니다 .
// 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
'Program Club' 카테고리의 다른 글
| 리모컨없이 모든 로컬 브랜치 나열 (0) | 2020.11.03 |
|---|---|
| sed에서 작은 따옴표를 이스케이프하는 방법은 무엇입니까? (0) | 2020.11.03 |
| asp.net에서 영구 쿠키를 만드는 방법은 무엇입니까? (0) | 2020.11.03 |
| 어댑터로 목록보기를 동적으로 업데이트 (0) | 2020.11.03 |
| 스레드 안전 C # 싱글 톤 패턴 (0) | 2020.11.03 |