gpt4 book ai didi

qt - 在应用程序窗口顶部绘制覆盖层

转载 作者:行者123 更新时间:2023-12-02 09:14:36 25 4
gpt4 key购买 nike

我希望能够在我的应用程序窗口顶部进行绘制,以便我可以使用一些额外的诊断信息来注释所有小部件,类似于 Firefox 中的 CSS 开发人员工具(例如添加小部件类、样式、突出显示边框等) .

我可以遍历小部件树并提取相关信息,但问题是如何使用这些信息覆盖所有应用程序窗口?

一种方法是覆盖我的 QMainWindow 的绘制事件,但必须对所有顶级窗口执行此操作。例如,是否有其他方法可以在 QDesktopWidget 上绘画?或者每个 QWidget 的绘制方法有任何 Hook 吗?任何涉及 QWidget 本身子类化的内容都不适用于标准小部件。

这是我之前的问题的延续:

干杯山魈

编辑:感谢 Dmitry,我现在有了一个非常简单且易于扩展的方法:

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

最佳答案

您可以基于 QMotifStyle 或其他创建自己的样式类......并在与他的信息相关的任何小部件/控件上进行绘制。

void MyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option,QPainter *painter, const QWidget *widget) const
{
QStyle::State flags = option->state;
QRect rect = option->rect;
QPalette pal = option->palette;
QBrush brush;

switch (element)
{
case PE_FrameTabWidget:
{
painter->save();

// for example: draw anything on TabWidget
painter->drawPixmap(rect,centerPm,centerPm.rect());
painter->restore();
}
break;
default:
QMotifStyle::drawPrimitive(element, option, painter, widget);
break;

}
}

关于qt - 在应用程序窗口顶部绘制覆盖层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5909907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com