guia - ¿Cómo puedo ocultar/eliminar el botón de ayuda "?" En la "barra de título" de un cuadro de diálogo Qt?
qgis manual (8)
A partir de Qt 5.10, puede desactivar estos botones globalmente con un único atributo QApplication
.
QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton)
Estoy usando Qt Dialogs en una de mis aplicaciones. Necesito ocultar / eliminar el botón de ayuda. Pero no soy capaz de localizar exactamente dónde obtengo el mango de su botón de ayuda. No estoy seguro si es una bandera en particular en la ventana de Qt.
La siguiente forma de eliminar los signos de interrogación por defecto para todos los cuadros de diálogo en la aplicación podría ser utilizada:
Adjunte el siguiente filtro de evento a 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);
}
Las respuestas enumeradas aquí funcionarán, pero para responderlo usted mismo, le recomendaría 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.
Me encontré con este problema en Windows 7, Qt 5.2, y la combinación de indicadores que funcionó mejor para mí fue esta:
Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint
Esto me da un botón para cerrar el trabajo pero no un botón de ayuda para marcar la pregunta. 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 Michael Bishop sugirió, estaba jugando con el ejemplo de windowflags que me llevó a esta combinación. ¡Gracias!
No pude encontrar una ranura, pero puede anular la función winEvent
virtual.
#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
Ok, encontré la manera de hacer esto.
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);
Por defecto, el indicador Qt :: WindowContextHelpButtonHint se agrega a los cuadros de diálogo. Puede controlar esto con el parámetro WindowFlags para el constructor del diálogo.
Por ejemplo, puede especificar solo las banderas TitleHint y SystemMenu haciendo:
QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();
Si agrega el indicador Qt :: WindowContextHelpButtonHint , volverá a obtener el botón de ayuda.
En PyQt puedes hacer:
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()
Se pueden encontrar más detalles sobre los indicadores de ventana en la enumeración WindowType en la documentación de Qt.
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);