Wie kann ich mich verstecken / löschen Sie die „?“ Hilfe-Taste auf der „Titelleiste“ einen Qt Dialogs?

StackOverflow https://stackoverflow.com/questions/81627

  •  09-06-2019
  •  | 
  •  

Frage

Ich bin mit Qt Dialoge in einer meiner Anwendung. Ich brauche, um die Hilfe-Button zu verbergen / löschen. Aber ich bin nicht in der Lage zu lokalisieren, wo genau ich den Griff zu Hilfe-Taste erhalten. Nicht sicher, ob seine eine bestimmte Flagge auf der Qt-Fenster.

War es hilfreich?

Lösung

Standardmäßig ist die Qt :: WindowContextHelpButtonHint Flag Dialoge hinzugefügt. Sie können dies steuern, mit dem WindowFlags Parameter in den Dialog-Konstruktor.

Zum Beispiel können Sie festlegen, nur die TitleHint und SystemMenu Flaggen, indem Sie:

QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();

Wenn Sie die Qt :: WindowContextHelpButtonHint hinzufügen Flagge Sie werden die Hilfe-Taste zurück.

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 Window Enum in der Qt-Dokumentation.

Andere Tipps

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

Ok, ich fand einen Weg, dies zu tun.

Es ist mit den Fensterfahnen befasst. Also hier ist der Code, den ich verwendet:

Qt::WindowFlags flags = windowFlags()

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   
setWindowFlags(flags);

Aber dies manchmal das Symbol des Dialogs tun wird zurückgesetzt. Also, um sicherzustellen, das Symbol des Dialogs ändert sich nicht, Sie zwei Zeilen hinzufügen können.

QIcon icon = windowIcon();

Qt::WindowFlags flags = windowFlags();

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   

setWindowFlags(flags);

setWindowIcon(icon);

Ich lief in dieses Problem in Windows 7, Qt 5.2 und die Fahnen-Kombination, die für mich am besten funktionierte, war dies:

Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint

Das gibt mir eine Arbeits Schließen-Schaltfläche, aber keine Hilfe Schaltfläche Fragezeichen. Mit nur Qt :: WindowTitleHint oder Qt :: WindowSystemMenuHint wurde von der Hilfe-Button los, aber es ist auch die Schließen-Schaltfläche.

deaktiviert

Als Michael Bishop vorgeschlagen, spielt er mit dem windowflags Beispiel, das diese Kombination führte mich. Dank!

Wie von Qt 5.10, können Sie diese Tasten global mit einem einzigen QApplication Attribute deaktivieren können!

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);

Die Antworten hier aufgeführt wird funktionieren, aber es selbst zu beantworten, würde ich empfehlen, das Beispielprogramm $QTDIR/examples/widgets/windowflags laufen. Das ermöglicht es Ihnen, alle Konfigurationen von Fensterfahnen und die Auswirkungen zu testen. Sehr nützlich für herauszufinden squirrelly windowflags Probleme.

Die folgende Art und Weise Fragezeichen standardmäßig für alle Dialoge in der Anwendung zu entfernen, verwendet werden könnte:

Schließen Sie den folgenden Ereignisfilter irgendwo am Anfang des Programms 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);
  }

Ich konnte keinen Slot finden, aber Sie können die virtuelle winEvent Funktion außer Kraft setzen.

#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
scroll top