为什么接收事件的多个小部件需要布局

Why a layout is required for multiple widgets recieving events?

本文关键字:小部 布局 事件 为什么      更新时间:2023-10-16

我实际上是在用 qt(container(从 QWidget 中错误化编写一个模块,其中包含多个plot,呈现一个graph,其中所有模块都来自 QWidget

所以它给出了:

  • 1 container可以有:
    • n plot s,其中每个都包含
    • 1 graph .

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

构造 allready 时通过相同方法添加的所有plot container都无法接收任何事件。

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

但是由于我无法理解他的解释,也不想进一步打扰他,所以我在这里问这个问题。

那么,为什么动态生成的

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

您可能会

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

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

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

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