Ich verwende Qt Dialoge in einer meiner Anwendung. Ich muss die Hilfeschaltfläche verstecken/löschen. Aber ich bin nicht in der Lage zu lokalisieren, wo genau ich den Griff zu seinem Hilfe-Knopf bekomme. Nicht sicher, ob es ein bestimmtes Flag im Qt-Fenster ist.Wie kann ich das "?" Hilfe-Button in der "Titelleiste" eines Qt-Dialogs?
Antwort
Standardmäßig wird das Flag Qt :: WindowContextHelpButtonHint zu Dialogen hinzugefügt. Sie können dies mit dem Parameter WindowFlags an den Dialogkonstruktor steuern.
Zum Beispiel können Sie nur geben Sie die TitleHint und SystemMenu Flaggen, indem Sie:
QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();
Wenn Sie die Qt :: WindowContextHelpButtonHint Flagge fügen Sie die Hilfe-Taste zurück zu bekommen.
In PyQt können Sie tun:
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()
Weitere Details über Fenster Flaggen auf der WindowType enum in der Qt-Dokumentation.
Ok, ich habe einen Weg gefunden, dies zu tun.
Es befasst sich mit den Window-Flags. Also hier ist der Code, den ich verwendete:
Aber dadurch manchmal das Symbol des Dialogs zurückgesetzt wird. Um sicherzustellen, dass sich das Symbol des Dialogfelds nicht ändert, können Sie zwei Zeilen hinzufügen.
QIcon icon = windowIcon();
Qt::WindowFlags flags = windowFlags();
Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;
flags = flags & (~helpFlag);
setWindowFlags(flags);
setWindowIcon(icon);
Kürzere Version: 'setWindowFlags (windowFlags() & ~ Qt :: WindowContextHelpButtonHint);' –
@ ThorbjørnLindeijer: Sie sollten dies als Antwort hinzufügen. – Hossein
Die hier aufgeführten Antworten wird funktionieren, aber es selbst zu beantworten, würde ich empfehlen Sie das Beispielprogramm $QTDIR/examples/widgets/windowflags
laufen. Damit können Sie alle Konfigurationen von Fensterflags und deren Auswirkungen testen. Sehr nützlich, um Probleme mit horrenden Windowflags herauszufinden.
Ich konnte keinen Steckplatz finden, aber Sie können die virtuelle winEvent
Funktion überschreiben.
#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
Ich lief in dieses Problem in Windows 7, Qt 5.2 und die Fahnen-Kombination, die am besten für mich gearbeitet, war dies:
Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint
Dies gibt mir eine funktionierende Schließen-Taste, aber keine Fragezeichen-Hilfe-Taste. Die Verwendung von nur Qt :: WindowTitleHint oder Qt :: WindowSystemMenuHint löste die Hilfe-Schaltfläche, aber auch die Schaltfläche zum Schließen.
Wie Michael Bishop vorgeschlagen hat, spielte es mit dem Windowflags-Beispiel, das mich zu dieser Kombination führte. Vielen Dank!
Dies ist die richtige Antwort. Die obigen Antworten deaktivieren die Schließen-Schaltfläche, die standardmäßig nicht deaktiviert ist. – Dan
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
Die folgende Art und Weise Fragezeichen standardmäßig für alle Dialoge in der Anwendung zu entfernen, verwendet werden könnte:
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);
}
:
die folgenden Ereignisfilter zu QApplication
irgendwo am Anfang des Programms anhang
Siehe rrwicks Antwort unten. Wenn Sie Ihren Flags nicht Qt :: WindowCloseButtonHint hinzufügen, haben Sie die Schließen-Schaltfläche deaktiviert, die standardmäßig aktiviert ist. – Dan
Hier ist ein Link Fenster Flags in PyQt4, http://pyqt.sourceforge.net/Docs/PyQt4/qt.html#WindowType-enum – Barmaley
Geben Sie auch das Flag 'Qt :: WindowCloseButtonHint', wenn Sie die Schließen-Schaltfläche möchten aktiviert werden. –