103 votes

Comment puis-je masquer/supprimer le bouton d'aide " ?" de la "barre de titre" d'une fenêtre de dialogue Qt ?

J'utilise des boîtes de dialogue Qt dans l'une de mes applications. J'ai besoin de cacher/supprimer le bouton d'aide. Mais je ne suis pas en mesure de localiser l'emplacement exact de la poignée de son bouton d'aide. Je ne sais pas si c'est un drapeau particulier sur la fenêtre Qt.

83voto

Jens-André Koch Points 3506
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);

70voto

Shoat Points 530

Par défaut, le Qt::WindowContextHelpButtonHint est ajouté aux boîtes de dialogue. Vous pouvez contrôler cela avec l'option WindowFlags au constructeur de la boîte de dialogue.

Par exemple, vous pouvez spécifier uniquement le TitleHint y SystemMenu des drapeaux en faisant :

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

Si vous ajoutez le Qt::WindowContextHelpButtonHint flag vous récupérerez le bouton d'aide.

Dans PyQt, vous pouvez le faire :

from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()

Plus de détails sur les drapeaux de fenêtre peuvent être trouvés sur le site de la Enum WindowType dans la documentation de Qt.

44voto

Parker Points 1098

À partir de Qt 5.10, vous pouvez désactiver ces boutons de manière globale avec un seul QApplication attribut !

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);

33voto

AMM Points 1305

Ok, j'ai trouvé un moyen de le faire.

Il traite des drapeaux de fenêtre. Voici donc le code que j'ai utilisé :

Qt::WindowFlags flags = windowFlags()

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

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

Mais en faisant cela, l'icône de la boîte de dialogue est parfois réinitialisée. Donc, pour s'assurer que l'icône de la boîte de dialogue ne change pas, vous pouvez ajouter deux lignes.

QIcon icon = windowIcon();

Qt::WindowFlags flags = windowFlags();

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   

setWindowFlags(flags);

setWindowIcon(icon);

19voto

rrwick Points 27

J'ai rencontré ce problème sous Windows 7, Qt 5.2, et la combinaison de drapeaux qui a le mieux fonctionné pour moi était la suivante :

Qt::WindowTitleHint | Qt::WindowCloseButtonHint

Cela me donne un bouton de fermeture fonctionnel mais pas de bouton d'aide avec point d'interrogation. En utilisant seulement Qt::WindowTitleHint ou Qt::WindowSystemMenuHint, je me suis débarrassé du bouton d'aide, mais j'ai également désactivé le bouton de fermeture.

Comme l'a suggéré Michael Bishop, c'est en jouant avec l'exemple windowflags que j'ai trouvé cette combinaison. Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X