De forma predeterminada, la marca Qt :: WindowContextHelpButtonHint se agrega a los diálogos. Puede controlar esto con el parámetro WindowFlags del constructor de 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 , recuperará 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 las banderas de ventana en la enumeración WindowType en la documentación de Qt.
Qt::WindowCloseButtonHint
si desea que se active el botón de cierre.QtCore.Qt.WindowCloseButtonHint
y lo eliminéQtCore.Qt.WindowTitleHint
. Supongo que la configuración de los indicadores anula los indicadores predeterminados, por lo que debe especificar todos los indicadores que desee.// remove question mark from the title bar setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
fuente
Ok, encontré una manera de hacer esto.
Se ocupa de las banderas de la ventana. Así que aquí está el código que utilicé:
Pero al hacer esto, a veces se restablece el icono del cuadro de diálogo. Entonces, para asegurarse de que el icono del cuadro de diálogo no cambie, puede agregar dos líneas.
fuente
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
A partir de Qt 5.10, puede desactivar estos botones globalmente con un solo
QApplication
atributo.fuente
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 de cierre que funciona pero no un botón de ayuda con el signo de interrogación. Usar solo Qt :: WindowTitleHint o Qt :: WindowSystemMenuHint eliminó el botón de ayuda, pero también deshabilitó el botón de cierre.
Como sugirió Michael Bishop, fue jugar con el ejemplo de las banderas de ventana lo que me llevó a esta combinación. ¡Gracias!
fuente
Las respuestas enumeradas aquí funcionarán, pero para responderlas usted mismo, le recomiendo que ejecute el programa de ejemplo
$QTDIR/examples/widgets/windowflags
. Eso le permitirá probar todas las configuraciones de banderas de ventana y sus efectos. Muy útil para resolver problemas de banderas de ventana de ardilla.fuente
Se puede utilizar la siguiente forma de eliminar los signos de interrogación de forma predeterminada para todos los cuadros de diálogo de la aplicación:
Adjunte el siguiente filtro de eventos en
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); }
fuente
No pude encontrar una ranura, pero puede anular la
winEvent
función 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
fuente