Come posso nascondere/eliminare il “?” pulsante guida sul “barra del titolo” di un Qt di Dialogo?
Domanda
Sto usando Qt Finestre di dialogo in una mia applicazione.Ho bisogno di nascondere/eliminare il pulsante di aiuto.Ma io non sono in grado di individuare esattamente dove ottenere l'handle per il suo pulsante di aiuto.Non so se è un particolare flag su Qt finestra.
Soluzione
Per impostazione predefinita, il Qt::WindowContextHelpButtonHint la bandiera viene aggiunto alla finestra di dialogo.È possibile controllare questo con il WindowFlags parametro al costruttore della finestra di dialogo.
Per esempio è possibile specificare solo il TitleHint e SystemMenu bandiere da fare:
QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();
Se si aggiunge il Qt::WindowContextHelpButtonHint bandiera si otterrà l'aiuto del pulsante indietro.
In PyQt si può fare:
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()
Ulteriori dettagli sulla finestra bandiere possono essere trovate sul WindowType enum in Qt documentazione.
Altri suggerimenti
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
Ok , ho trovato un modo per fare questo.
Si tratta la Finestra di bandiere.Così qui è il codice che ho usato:
Qt::WindowFlags flags = windowFlags()
Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;
flags = flags & (~helpFlag);
setWindowFlags(flags);
Ma facendo questo, a volte, l'icona della finestra di dialogo si resetta.Assicurarsi che l'icona della finestra di dialogo non si cambia si possono aggiungere due righe.
QIcon icon = windowIcon();
Qt::WindowFlags flags = windowFlags();
Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;
flags = flags & (~helpFlag);
setWindowFlags(flags);
setWindowIcon(icon);
Mi sono imbattuto in questo problema in Windows 7, Qt 5.2, e le bandiere combinazione che ha funzionato meglio per me è stato questo:
Qt::WindowTitleHint | Qt::WindowCloseButtonHint
Questo mi dà un lavoro, ma senza il punto interrogativo pulsante di aiuto.Utilizzando solo Qt::WindowTitleHint o Qt::WindowSystemMenuHint eliminato il pulsante di aiuto, ma anche disabilitato il pulsante chiudi.
Come Michael Bishop suggerito, stava giocando con il windowflags esempio che mi ha portato a questa combinazione.Grazie!
Come di Qt 5.10, è possibile disattivare questi pulsanti in tutto il mondo con un unico QApplication
attributo!
QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);
Le risposte elencati qui funzionerà, ma per rispondere a te, mi consiglia di eseguire il programma di esempio $QTDIR/examples/widgets/windowflags
.Che vi permetterà di testare tutte le configurazioni di finestre le bandiere e i loro effetti.Molto utile per capire squirrelly windowflags problemi.
Modo seguente per rimuovere punti di domanda per impostazione predefinita per tutte le finestre di dialogo in applicazione può essere utilizzato:
Allega la seguente filtro eventi QApplication
da qualche parte all'inizio del programma:
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);
}
Non riuscivo a trovare una fessura, ma è possibile ignorare il virtuale winEvent
funzione.
#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