Выглядит полезно, спасибо

у иметь возможность рисовать поверх окна моего приложения, чтобы я мог аннотировать все виджеты некоторой дополнительной диагностической информацией, аналогично инструментам разработчика CSS в Firefox (например, добавлять классы виджетов, стили, границы выделения и т. Д.).

Я могу пройтись по дереву виджетов и извлечь соответствующую информацию, но вопрос в том, как я могу наложить все окна приложения на эту информацию?

Одним из способов было бы переопределить мойQMainWindowСобытие рисования, но это должно быть сделано для всех окон верхнего уровня. Есть ли альтернативный метод, где вы можете рисовать наQDesktopWidget например? Или любые крючки в каждомQWidgetметод рисования? Все, что включает в себя подклассыQWidget Сам не будет работать со стандартными виджетами.

Это следует из моего предыдущего вопроса:

Есть ли какие-нибудь полезные инструменты для диагностики разметки Qt и пробелов?

ура Мандрилла

РЕДАКТИРОВАТЬ: Благодаря Дмитрию у меня теперь есть действительно простой метод, который легко расширяемый:

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

Ответы на вопрос(2)

Ваш ответ на вопрос