如何通过 qt 设计器创建 QSplitter ui 类?
Posted
技术标签:
【中文标题】如何通过 qt 设计器创建 QSplitter ui 类?【英文标题】:How to create QSplitter ui class via qt designer? 【发布时间】:2016-02-08 09:05:14 【问题描述】:我是 Qt 新手,我需要实现一个监控接口,考虑以下几点:
-
我有一个主窗口,我应该在其上放置多个屏幕,qsplitter 似乎是最好的解决方案。
该界面为用户提供了更改摄像头数量的选项,因此应在运行时创建/重新创建
QSplitter
。
问题是我有太多相机无法为它们预先定义小部件,所以我需要动态创建QSplitter
UI 实例。
问题是我在使用Qt Designer
时找不到QSplitter
类,并且以编程方式创建QSplitter
类不起作用,因为MainWindow
是通过Qt Designer
(.ui) 创建的。
我想听听关于这个问题的任何建议,如果有更好的方法,请告诉我。
【问题讨论】:
【参考方案1】:QSplitter
不是严格的 UI 元素,它本质上是控制子元素的父元素。如果你想通过 Designer 来做,你可能会很头疼,但基本要点是你选择一些要由它控制的小部件,然后单击布局按钮组中的 Layout Horizontally/Vertically in splitter
按钮。
您可能最好的做法是以编程方式创建子元素,以编程方式创建拆分器,使用someSplitter->addWidget(...)
添加子小部件。在 Qt 文档中有一些示例代码:
QSplitter *splitter = new QSplitter(parent);
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
QTextEdit *textedit = new QTextEdit;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->addWidget(textedit);
http://doc.qt.io/qt-5/qsplitter.html#details
如果您真的想在 Designer 中执行此操作,这里有一个指南:http://www.bogotobogo.com/Qt/Qt5_Splitter.php
【讨论】:
【参考方案2】:在 Qt Designer 中,QSplitter
不是小部件,而是Layout
。
选择要包含在两个分割区域中的小部件,然后从上下文菜单中选择 Layout
(鼠标右键) - 您会发现两个条目 Layout Horizontally in splitter
和 Layout Vertically in splitter
将小部件垂直分组或在水平拆分器中。
【讨论】:
【参考方案3】:虽然 QSplitter 是一个小部件,但您不能直接在 Qt Designer 中创建一个。它仅可用于布置 预先存在的小部件 - 这不适合您的用例,因为您需要动态创建子小部件。
但是,您可以使用widget promotion 来解决此限制。这是一个简单的机制,允许您添加替代类来表示在 Qt Designer 中不直接可用的小部件。这个想法是您添加一个与您实际想要的最相似的小部件(例如,QFrame
与QSplitter
最相似),然后将其提升到您在自己的头文件中定义的替代类。当 uic 最终生成代码时,它将使用您的替代类而不是 Qt 设计器中添加的小部件类(它只是充当占位符)。
请注意,当您在“Promoted Widgets”对话框中创建替代类时,基类应该是QFrame
,而不是QSplitter
。这是因为您正在扩展 QFrame
(即您的占位符小部件),而不是 QSplitter
。当然,您可以将替代类定义为您喜欢的任何类型。
【讨论】:
【参考方案4】:图片更容易理解。
【讨论】:
以上是关于如何通过 qt 设计器创建 QSplitter ui 类?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 qt 设计器中将功能连接到 qt 小部件? - Python