Quiero pintar en la parte superior de la ventana de mi aplicación para poder anotar todos los widgets con información de diagnóstico adicional, similar a las herramientas de desarrollador CSS en Firefox (por ejemplo, agregar clases de widgets, estilos, bordes resaltados, etc.).Dibujando una superposición en la parte superior de la ventana de una aplicación
Puedo recorrer el árbol de widgets y extraer la información relevante, pero la pregunta es ¿cómo puedo superponer todas las ventanas de la aplicación con esta información?
Una forma sería anular el evento de pintura de QMainWindow
, pero esto tiene que hacerse para todas las ventanas de nivel superior. ¿Hay un método alternativo donde se puede pintar en el QDesktopWidget
, por ejemplo? O cualquier gancho en cada método de pintura QWidget
? Todo lo que implique la subclasificación de QWidget
no funcionará con los widgets estándar.
Esto es consecuencia de mi anterior pregunta:
aplausos Mandril
EDIT: Gracias a Dmitry ahora yo tengo un método muy simple que es fácil extensible:
class DiagnosticStyle : public QWindowsVistaStyle
{
Q_OBJECT
public:
typedef QWindowsVistaStyle BaseStyle;
void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const;
};
void DiagnosticStyle::drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const
{
BaseStyle::drawControl(element, option, painter, widget);
if (widget && painter) {
// draw a border around the widget
painter->setPen(QColor("red"));
painter->drawRect(widget->rect());
// show the classname of the widget
QBrush translucentBrush(QColor(255,246,240, 100));
painter->fillRect(widget->rect(), translucentBrush);
painter->setPen(QColor("darkblue"));
painter->drawText(widget->rect(), Qt::AlignLeft | Qt::AlignVCenter, widget->metaObject()->className());
}
}
qApp->setStyle(new DiagnosticStyle());
Esa es una buena idea - sería más útil para anular 'Qstyle :: drawControl()' en lugar, como que le da acceso al widget? –
Resulta que esto es exactamente lo que necesitaba - ver mi publicación editada –