c++ - 绘制后在自定义小部件上绘制

标签 c++ qt qwidget

我有一个自定义小部件,它继承了 QWidget。它有自己的 paintEvent,我无法更改它。所以我想在我的对话框对象中使用这样一个小部件,但我需要在它绘制自己的图形后在其上绘制一些图形(该小部件在其上绘制视频帧,我需要在其上绘制一些线条)。我可以在那个小部件的 paintEvent 之后每次绘制吗?我使用了 installEventFilter 并捕获了 Qt::Paint 类型的事件,但我无法看到我淹没的任何东西。还有其他办法吗?

最佳答案

  1. 您可以从自定义小部件类派生,重新实现paintEvent,并先调用继承的paintEvent,然后再进行绘图。

    <
  2. 您可以在小部件上安装事件过滤器并执行相同的操作:首先调用小部件的 paintEvent,然后进行绘图。

  3. 隐藏另一个小部件。创建您自己的小部件,并在您的小部件的 paintEvent 中调用其他小部件的 render 方法,然后进行绘图。由于另一个小部件可能正在呈现随时间周期性变化的视频帧,您可能需要使用计时器来update() 您的小部件。

在这两种情况下,您都不会修改第 3 方自定义小部件。

为了调用其他小部件的 protected paintEvent,您需要使用 QWidget,即使只是一个虚拟的、不可见的。

关于c++ - 绘制后在自定义小部件上绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19015068/

相关文章:

c++ - 没有 ntohs 的字节顺序交换

c++ - 如何有效地返回大型数据结构。

c++ - Q_INVOKABLE 方法返回自定义 C++ 类型

css - 为什么QWidget的边框会覆盖内容?

c++ - Qt 创建者 : Widget is not added to layout

c++ - 没有 libeay32.dll 的 OpenSSL win32

c++ - 将一个字节组合成 long long

c++ - QML:在 C++ 中获取 MouseArea 的鼠标事件

c++ - 正确使用 QProgressDialog

c++ - QTreeWidgetItem 中的 QWidget 在重新排序 QTreeWidgetItem 后消失