2008-09-17 9 views

Antwort

45

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.

+2

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

+1

Hier ist ein Link Fenster Flags in PyQt4, http://pyqt.sourceforge.net/Docs/PyQt4/qt.html#WindowType-enum – Barmaley

+1

Geben Sie auch das Flag 'Qt :: WindowCloseButtonHint', wenn Sie die Schließen-Schaltfläche möchten aktiviert werden. –

26

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); 
+24

Kürzere Version: 'setWindowFlags (windowFlags() & ~ Qt :: WindowContextHelpButtonHint);' –

+1

@ ThorbjørnLindeijer: Sie sollten dies als Antwort hinzufügen. – Hossein

3

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.

0

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 
8

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!

+0

Dies ist die richtige Antwort. Die obigen Antworten deaktivieren die Schließen-Schaltfläche, die standardmäßig nicht deaktiviert ist. – Dan

20
// remove question mark from the title bar 
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); 
0

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