2008-09-17 100 views

Respuesta

45

De forma predeterminada, se agrega la marca Qt :: WindowContextHelpButtonHint a los cuadros de diálogo. Puede controlar esto con el parámetro WindowFlags en el constructor del diálogo.

Por ejemplo, puede especificar sólo la TitleHint y SystemMenu banderas haciendo:

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

Si se agrega el Qt :: WindowContextHelpButtonHint bandera obtendrá el botón de ayuda posterior.

En PyQt que puede hacer:

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

Más detalles sobre banderas de las ventanas se pueden encontrar en la WindowType enum en la documentación de Qt.

+2

Vea la respuesta de rrwick a continuación. Si no agrega Qt :: WindowCloseButtonHint a sus banderas, habrá desactivado el botón Cerrar, que está habilitado de manera predeterminada. – Dan

+1

Aquí hay un enlace que especifica los indicadores de ventana en PyQt4, http://pyqt.sourceforge.net/Docs/PyQt4/qt.html#WindowType-enum – Barmaley

+1

También agregue la marca 'Qt :: WindowCloseButtonHint' si desea el botón de cerrar para ser activado –

26

Ok, encontré la manera de hacerlo.

Se trata de las banderas de la ventana. Así que aquí está el código que utilicé:

Qt::WindowFlags flags = windowFlags() 

Qt::WindowFlags helpFlag = 
Qt::WindowContextHelpButtonHint; 

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

Pero al hacer esto a veces el icono del diálogo se restablece. Entonces, para asegurarse de que el ícono del diálogo no cambie, puede agregar dos líneas.

QIcon icon = windowIcon(); 

Qt::WindowFlags flags = windowFlags(); 

Qt::WindowFlags helpFlag = 
Qt::WindowContextHelpButtonHint; 

flags = flags & (~helpFlag); 

setWindowFlags(flags); 

setWindowIcon(icon); 
+24

Versión más corta: 'setWindowFlags (windowFlags() & ~ Qt :: WindowContextHelpButtonHint);' –

+1

@ ThorbjørnLindeijer: Debe agregar esto como una respuesta. – Hossein

3

Las respuestas figuran en esta lista va a funcionar, pero para responder a usted mismo, te recomiendo que ejecute el programa de ejemplo $QTDIR/examples/widgets/windowflags. Eso le permitirá probar todas las configuraciones de indicadores de ventana y sus efectos. Muy útil para descubrir los problemas de las ventanas de ardilla.

0

No pude encontrar una ranura pero puede anular la función virtual winEvent.

#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 
8

me encontré con este problema en Windows 7, Qt 5.2, y la combinación banderas que funcionó mejor para mí era la siguiente:

Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint

Esto me da un botón para cerrar el botón que funciona pero sin signo de interrogación. El uso de solo Qt :: WindowTitleHint o Qt :: WindowSystemMenuHint eliminó el botón de ayuda, pero también deshabilitó el botón de cerrar.

Como sugirió Michael Bishop, estaba jugando con el ejemplo de windowflags que me llevó a esta combinación. ¡Gracias!

+0

Esta es la respuesta correcta. Las respuestas anteriores desactivan el botón de cerrar, que de forma predeterminada no está deshabilitado. – Dan

20
// remove question mark from the title bar 
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); 
0

la siguiente manera para eliminar signos de interrogación por defecto para todos los cuadros de diálogo de la aplicación podrían utilizarse:

Acople el filtro siguiente evento para QApplication algún lugar al comienzo de su programa:

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); 
    } 
Cuestiones relacionadas