【发布时间】:2016-08-29 14:57:16
【问题描述】:
我实际上是在 qt (container) 中编写一个模块,该模块来自 QWidget,其中包含多个 plots,呈现一个 graph,其中所有这些模块都来自 QWidget。
所以给定了:
- 1
container可以有:- n
plots 其中每个都包含 - 1
graph.
- n
昨天我花了很多时间来找出一个错误。
碰巧只有 n 个plots(出于调试目的)在其构造函数中添加到容器中以捕获绘制事件。
在container 已构建完成时通过相同方法添加的所有plots 都无法接收任何事件。
稍后,在我请求帮助后,一位同事向我解释说,我的 container(位于 mainwindow-form 中)需要在 Qtdesigner 中分配一个布局。我试了一下,很惊讶它确实解决了我的问题。将动态生成的plots 添加到container 并将它们添加到布局后,所有小部件都按预期接收事件。
但是由于我无法理解他的解释,也不想再打扰他,所以我在这里问。
那么,为什么作为其他动态生成的 QWidget 的子对象的动态生成的小部件需要作为 mainwindow 的子对象的父对象来分配布局?
如果这不仅仅是一个例外情况,为什么默认情况下没有分配它,而且我无法在网上找到有此类问题的案例?
【问题讨论】:
-
恕我直言,您应该编辑问题以删除对您同事的任何引用。提到其他人无法回答并想象他会读到这个......的问题并不真正相关
-
@tobi303:我什至不想让他显得更糟糕,以表明我不太喜欢 qt,因此我希望它有点相关。但你可能是对的。
-
什么事件?我希望看到一个 SSCCE 来演示这个问题。
-
@thuga: qt 事件循环的任何事件。嗯,不太确定要放入什么,因为我正在动态创建对象并且我还不知道可能导致问题的原因。虽然只是做一个
layout->addWidget(fop);让事情顺利进行。所以我的问题的主要部分是在 qt-designer 中完成的,而另一部分将是很多行只是配置小部件。您能帮我确定这里的 SSCCE 需要什么吗? -
复制问题的尽可能小而紧凑的代码。您可以使用一些虚拟小部件,它们除了听一些事件外,并没有真正做任何事情。您在设计器中所做的一切都可以在代码中完成。您可以查看 this answer 以获取
SSCCE的一个很好的示例。
标签: c++ qt inheritance qt-designer qt-events