J'utilise Qt Dialogs 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 exactement où j'obtiens la poignée de son bouton d'aide. Je ne sais pas si c'est un indicateur particulier sur la fenêtre Qt.
Par défaut, l'indicateur Qt :: WindowContextHelpButtonHint est ajouté aux boîtes de dialogue. Vous pouvez contrôler cela avec le paramètre WindowFlags du constructeur de la boîte de dialogue.
Par exemple, vous pouvez spécifier uniquement les indicateurs TitleHint et SystemMenu en faisant:
QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();
Si vous ajoutez le drapeau Qt :: WindowContextHelpButtonHint , vous obtiendrez le bouton d'aide.
Dans PyQt, vous pouvez 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 des fenêtres peuvent être trouvés sur le WindowType enum dans la documentation Qt.
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
Ok, j'ai trouvé un moyen de le faire.
Il traite des drapeaux Windows. 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, parfois l'icône de la boîte de dialogue est réinitialisée. Donc, pour vous 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);
Depuis Qt 5.10, vous pouvez désactiver ces boutons globalement avec un seul attribut QApplication
!
QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);
J'ai rencontré ce problème dans Windows 7, Qt 5.2, et la combinaison de drapeaux qui m'a le mieux fonctionné était la suivante:
Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint
Cela me donne un bouton de fermeture fonctionnel mais pas de bouton d'aide de point d'interrogation. L'utilisation de Qt :: WindowTitleHint ou Qt :: WindowSystemMenuHint s'est débarrassée du bouton d'aide, mais elle a également désactivé le bouton de fermeture.
Comme Michael Bishop l'a suggéré, c'est en jouant avec l'exemple des drapeaux de fenêtre qui m'a conduit à cette combinaison. Merci!
Les réponses répertoriées ici fonctionneront, mais pour y répondre vous-même, je vous recommande d'exécuter le programme d'exemple $QTDIR/examples/widgets/windowflags
. Cela vous permettra de tester toutes les configurations de drapeaux de fenêtre et leurs effets. Très utile pour résoudre les problèmes de drapeaux de fenêtre écureuils.
La méthode suivante pour supprimer les points d'interrogation par défaut pour toutes les boîtes de dialogue de l'application peut être utilisée:
Attachez le filtre d'événements suivant à QApplication
quelque part au début de votre programme:
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);
}