Domyślnie flaga Qt :: WindowContextHelpButtonHint jest dodawana do okien dialogowych. Można to kontrolować za pomocą parametru WindowFlags do konstruktora okna dialogowego.
Na przykład możesz określić tylko flagi TitleHint i SystemMenu , wykonując:
QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();
Jeśli dodasz flagę Qt :: WindowContextHelpButtonHint , otrzymasz z powrotem przycisk pomocy.
W PyQt możesz:
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()
Więcej szczegółów na temat flag okien można znaleźć w wyliczeniu WindowType w dokumentacji Qt.
Qt::WindowCloseButtonHint
jeśli chcesz, aby przycisk zamykania był aktywny.QtCore.Qt.WindowCloseButtonHint
i usunąćQtCore.Qt.WindowTitleHint
. Zakładam, że ustawienie flag zastępuje flagi domyślne, więc musisz określić wszystkie żądane flagi.// remove question mark from the title bar setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
źródło
Ok, znalazłem sposób, żeby to zrobić.
Zajmuje się flagami okien. Oto kod, którego użyłem:
Ale w ten sposób czasami ikona okna dialogowego zostaje zresetowana. Aby upewnić się, że ikona okna dialogowego nie zmienia się, możesz dodać dwie linie.
źródło
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
Począwszy od Qt 5.10, możesz wyłączyć te przyciski globalnie za pomocą jednego
QApplication
atrybutu!źródło
Napotkałem ten problem w systemie Windows 7, Qt 5.2, a kombinacja flag, która działała najlepiej, była następująca:
Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint
To daje mi działający przycisk zamykania, ale nie ma przycisku pomocy ze znakiem zapytania. Użycie tylko Qt :: WindowTitleHint lub Qt :: WindowSystemMenuHint pozbyło się przycisku pomocy, ale również wyłączyło przycisk zamykania.
Jak zasugerował Michael Bishop, do takiego połączenia doprowadziły mnie przykładowe flagi na oknach. Dzięki!
źródło
Odpowiedzi wymienione tutaj będą działać, ale aby odpowiedzieć sobie na nie sam, radzę uruchomić przykładowy program
$QTDIR/examples/widgets/windowflags
. Umożliwi to przetestowanie wszystkich konfiguracji flag okien i ich efektów. Bardzo przydatne przy rozwiązywaniu wiewiórczych problemów z oknami.źródło
Można zastosować następujący sposób domyślnego usuwania znaków zapytania ze wszystkich okien dialogowych w aplikacji:
Dołącz następujący filtr zdarzeń
QApplication
gdzieś na początku programu: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); }
źródło
Nie mogłem znaleźć gniazda, ale możesz zastąpić funkcję wirtualną
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
źródło