将自定义窗口小部件动态添加到烘焙布局中

时间:2013-08-02 14:52:17

标签: c++ qt qt5 custom-widgets

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

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

我在某些地方读过,覆盖主窗口的resize事件函数可以解决这个问题,但这只是在我没有使用布局的情况下 - 我更喜欢使用布局。

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

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

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的描述,您将拥有一个带有空白QFrame的主窗口,您希望在运行时动态添加其他QWidgets。

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

答案 1 :(得分:0)

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

从过去的经验来看,您所描述的内容(添加到布局,将该布局分配给框架)起作用,并且是正确的方法。所以我想必须有一些代码来处理自定义小部件中缺少的布局信号。

例如:

  

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

来自:Widgets and Layouts doc