Używam Qt Dialogs w jednej z moich aplikacji. Muszę ukryć / usunąć przycisk pomocy. Ale nie jestem w stanie zlokalizować, gdzie dokładnie mam uchwyt jego przycisku pomocy. Nie jestem pewien, czy jest to szczególna flaga w oknie Qt.
Odpowiedzi:
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);
Ok, znalazłem sposób, żeby to zrobić.
Zajmuje się flagami okien. Oto kod, którego użyłem:
Qt::WindowFlags flags = windowFlags()
Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;
flags = flags & (~helpFlag);
setWindowFlags(flags);
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.
QIcon icon = windowIcon();
Qt::WindowFlags flags = windowFlags();
Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;
flags = flags & (~helpFlag);
setWindowFlags(flags);
setWindowIcon(icon);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
Począwszy od Qt 5.10, możesz wyłączyć te przyciski globalnie za pomocą jednego QApplication
atrybutu!
QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);
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!
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.
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);
}
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