2010-06-03 5 views
19

Ich erstelle eine Instanz von QDialog und links von 'x' (schließen) Knopf habe ich auch '?' Taste. Wie kann ich das '?' ?Qt - Deaktivieren von QDialogs "?" Button

+0

Mögliche Duplikat [Wie kann ich mich verstecken/Löschen der Hilfe-Schaltfläche auf der "Titelleiste" eines Qt-Dialogs?] (http://stackoverflow.com/questions/81627/how-can-i-hide-delete-the-help-button-on-the-title-bar -of-a-qt-dialog) –

Antwort

37

Ändern Sie die Fensterfahnen, zum Beispiel im Konstruktor: „?“

this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); 
+0

Danke, das ist was ich brauche. – Narek

+1

Der Versuch, setWindowFlags() direkt aufzurufen, hat nicht funktioniert, weil '~' nicht angewendet wurde & = operator:

 Qt::WindowFlags flags = windowFlags(); flags &= ~Qt::WindowContextHelpButtonHint; setWindowFlags(flags); 

+1

Eigentlich hatten wir das gegenteilige Problem, unser Dialog hatte keine Help-Taste. Diese Antwort half uns, nach dem Problem zu suchen. Danke – Liz

5

Aus dem Qt 4.6 QDialog Dokumentation:

QDialog::QDialog (QWidget * parent = 0, Qt::WindowFlags f = 0) 

Konstruiert einen Dialog mit Eltern parent.

Ein Dialog ist immer ein Top-Level-Widget, aber wenn es einen Elternteil hat, ist sein Standard-Speicherort auf dem übergeordneten Element zentriert. Es teilt auch den Taskleisteneintrag des Elternteils.

Die Widget-Flags f werden an den QWidget-Konstruktor übergeben. Wenn z. B. keine Schaltfläche ** Was ist das in der Titelleiste des Dialogfelds ** sein soll, übergeben Sie Qt::WindowTitleHint | Qt::WindowSystemMenuHint in f.

Siehe auch QWidget::setWindowFlags().

+2

Für QDialog Qt :: WindowTitleHint | Qt :: WindowSystemMenuHint-Flags verursachen ein abnormales Verhalten. – Narek

0

Wenn Sie nur die Schaltfläche deaktivieren möchten, können Sie setEnabled(bool) aufrufen, aber ich bezweifle, dass das gefragt wird.

Wenn Sie diese Schaltfläche entfernen möchten, siehe unten:

QDialog soll eine QDialogButtonBox wie die Tasten verwenden, die im Dialogfeld angezeigt. Sie können Accessoren verwenden, die in QDialogButtonBox verfügbar sind, um die Schaltflächen zu deaktivieren, die Sie nicht möchten (und andere auch aktivieren).

Zum Beispiel (aus der Dokumentation zu oben verlinkten):

findButton = new QPushButton(tr("&Find")); 
findButton->setDefault(true); 

moreButton = new QPushButton(tr("&More")); 
moreButton->setCheckable(true); 
moreButton->setAutoDefault(false); 

buttonBox = new QDialogButtonBox(Qt::Vertical); 
buttonBox->addButton(findButton, QDialogButtonBox::ActionRole); 
buttonBox->addButton(moreButton, QDialogButtonBox::ActionRole); 

Wenn Sie keine Kenntnis von der Buttonbox sind, ich die Designer erraten würde automatisch hinzugefügt, es für Sie und es soll einen Namen hat das macht es zugänglich. Es sollte auch Eigenschaften (Checkboxen) geben, die Sie überprüfen können, um zu steuern, auf welche Schaltflächen standardmäßig zugegriffen werden kann.

+0

Dies ist eine gut geschriebene Antwort, aber ich denke, er bezog sich auf Schaltflächen in der Titelleiste für den Dialog (Fensterdekorationen). –

+0

Oh. Ich denke du hast recht - ich habe das definitiv falsch verstanden :(. –