0

我实际上是在 qt( container) 中编写一个模块 inerhit from QWidget,其中包含多个plots ,这些 s 表示graph所有它们都 inerhit from QWidget

所以给出了:

  • 1container可以有:
    • n plots 其中每个包含
    • 1 graph.

昨天我花了很多时间来找出一个错误。碰巧只有 n plot(出于调试目的)在其构造函数中添加到容器中以捕获绘制事件。

plot在 s 已经构建时通过相同方法添加的所有scontainer都无法接收任何事件。

后来,在我请求帮助后,一位同事向我解释说,我的container(位于mainwindow-form 中)需要在 Qtdesigner 中分配一个布局。我试了一下,很惊讶它确实解决了我的问题。在将动态生成plot的 s添加到 scontainer并将它们添加到布局后,所有小部件都按预期接收事件。

但由于我无法理解他的解释,也不想再打扰他,所以我在这里问。

那么,为什么作为其他动态生成的 QWidgets 的子对象的动态生成的小部件需要作为子对象的父级mainwindow来分配布局呢?如果这不仅仅是一个例外情况,为什么默认情况下没有分配它,而且我无法在网上找到有此类问题的案例?

4

1 回答 1

0

您可能会看到重叠同级小部件的副作用,或者尺寸为零的小部件。布局所做的只是调整它们的大小并确保它们不重叠。

在其构造函数中添加到容器中以捕获绘制事件

您所说的“捕获”绘制事件是什么意思,这与任何构造函数有什么关系?您声称您的所有类(容器、绘图和图形)都派生自QWidget. 它们都应该实现paintEvent,除非它们被设计为除了默认背景画笔之外没有自己的内容。

我想您以某种方式使事情变得过于复杂,但是如果没有我们可以编译以复制您的问题的自包含代码,我们将绕圈子。随意看看我的答案:它们都由一个单一的main.cpp,有时挤入了相当多的功能。几乎普遍,除了演示给定技术所必需的代码之外,没有其他代码。您的问题应该包括类似的最小化、可编译的示例。

于 2016-05-04T15:29:47.983 回答