0

我正在开发一些桌面软件,它需要一个带有动态内容框架的静态窗口。框架位于主窗口上,主窗口有一个网格布局,允许我通过编辑器添加的小部件自动调整大小/扩展窗口大小。

我创建了一个自定义小部件(并使用框架和可停靠小部件进行了一些变化)来尝试获得所需的行为。当我将此小部件添加到新布局(我已尝试过 QVBoxLayout 和 QGridLayout)并告诉框架使用该布局时,不会显示任何小部件,但是,如果我创建小部件的框架变体并将其与框架一起作为父级在构造函数(又名 new CustomWidget( this->ui->my_frame ); )中,它显示,但显然不遵循布局(不展开)。我的自定义小部件(作为 QWidget、QFrame 或 QDockableWidget)的其他组合不会显示在我的框架中,如果它出现的可能性不大,它不会随着窗口调整大小事件而扩展。

我在某些地方读到覆盖主窗口的调整大小事件函数可能会解决这个问题,但这仅在我不使用布局的情况下 - 我更喜欢使用布局。

如果我使用固定内容和 QTabWidget,我可以获得所需的输出,但我正在为其构建此应用程序的客户端非常希望我不使用选项卡。他们的竞争对手的软件使用标签,我们都同意它看起来很笨重。

我想我最终要编写小部件界面的代码,但现在我很好奇为什么将这些小部件导入布局不能按预期工作。

4

2 回答 2

0

我建议尝试从一个简单小部件的子类开始(例如带有一些文本的 QLabel),并在您的代码中使用它来查看它是否有效。您可能需要添加代码来处理 Qt 期望小部件执行的操作,并且现有小部件已经在处理这些操作。

根据过去的经验,您所描述的(添加到布局,将该布局分配给框架)是有效的,并且是正确的做法。所以我想一定有一些代码可以处理自定义小部件中缺少的布局信号。

例如:

布局是一种优雅而灵活的方式,可以在其容器中自动排列子小部件。每个小部件通过 sizeHint 和 sizePolicy 属性向布局报告其大小要求,布局相应地分配可用空间。

来自:小部件和布局文档

于 2013-08-03T15:09:41.490 回答
0

如果我正确理解了您的描述,那么您有一个带有空白 QFrame 的主窗口,您希望使用它在运行时动态添加其他 QWidget。

将新的子 QWidgets 添加到占位符 QFrame 时,如果您希望它们自动放置和调整大小,则必须将它们添加到占位符 QFrame 的 QLayout,而不是主窗口。

于 2013-08-02T16:10:44.240 回答