Desenho de uma sobreposição na parte superior da janela de um aplicativo

Eu quero poder pintar em cima da janela do meu aplicativo para que eu possa anotar todos os widgets com algumas informações de diagnóstico extras, semelhantes às ferramentas de desenvolvedor CSS no Firefox (por exemplo, adicione classes de widget, estilos, bordas de destaque etc.

Posso percorrer a árvore do widget e extrair as informações relevantes, mas a questão é como posso sobrepor todas as janelas do aplicativo com essas informaçõe

Uma maneira seria substituir meuQMainWindowvento de pintura de @, mas isso deve ser feito para todas as janelas de nível superior. Existe um método alternativo onde você pode pintar noQDesktopWidget por exemplo? Ou qualquer gancho em cadaQWidgetétodo de pintura de @? Qualquer coisa que envolva subclassificaçãoQWidget próprio @ não funcionará com os widgets padrã

Isso segue da minha pergunta anterior:

xistem ferramentas úteis para diagnosticar problemas de espaçamento e layout Q

cheers Mandrill

EDIT: Graças a Dmitry, agora tenho um método muito simples e facilmente extensível:

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());

questionAnswers(2)

yourAnswerToTheQuestion