Рисование наложения поверх окна приложения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ура Мандрил

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

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

12
задан Community 23 May 2017 в 12:08
поделиться