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 meuQMainWindow
vento 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 Qcheers 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());