Come posso nascondere/eliminare il “?” pulsante guida sul “barra del titolo” di un Qt di Dialogo?

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

  •  09-06-2019
  •  | 
  •  

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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top