如何通过 qt 设计器创建 QSplitter ui class?
How to create QSplitter ui class via qt designer?
我是Qt新手,需要实现一个监控接口,考虑如下:
- 我有一个主 window,我应该在上面放多个屏幕,qsplitter 似乎是最好的解决方案。
- 该界面为用户提供了更改摄像机数量的选项,因此
QSplitter
在 运行 时间内应该是 created/re-created。
问题是我有太多相机无法为它们预定义小部件,所以我需要动态创建 QSplitter
UI 个实例。
问题是我在使用 Qt Designer
时找不到 QSplitter
classes 并且以编程方式创建 QSplitter
class 无法正常工作,因为 MainWindow
有通过 Qt Designer
(.ui) 创建。
我想听听关于这个问题的任何建议,如果有更好的方法,请告诉我。
在 Qt Designer 中,QSplitter
不是小部件,而是 Layout
。
Select 您想要包含在两个分隔区域中的小部件,然后从上下文菜单(鼠标右键)中 select Layout
- 您将找到两个条目 Layout Horizontally in splitter
和 Layout Vertically in splitter
以垂直或水平拆分器对小部件进行分组。
QSplitter
不是严格的 UI 元素,它本质上是一个控制子元素的父元素。如果你想通过 Designer 完成它,你可能 运行 会很头疼,但基本要点是你 select 一些要由它控制的小部件,然后单击 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
尽管 QSplitter 是一个小部件,但您不能直接在 Qt Designer 中创建它。它仅可用于布置 预先存在的 小部件 - 这不适合您的用例,因为您需要动态创建子小部件。
但是,您可以使用 widget promotion 解决此限制。这是一个简单的机制,允许您添加替代 classes 来表示 Qt Designer 中不直接可用的小部件。这个想法是,您添加一个与您实际想要的最相似的小部件(例如 QFrame
与 QSplitter
最相似),然后将其提升为您想要的替代品 class已经在你自己的头文件中定义了。当 uic 最终生成代码时,它将使用您的替代 class 而不是 Qt Designer 中添加的小部件的 class(它只是作为占位符)。
请注意,当您在 Promoted Widgets 对话框中创建替代 class 时,基础 class 应该是 QFrame
,而不是 QSplitter
。这是因为您正在扩展 QFrame
(即您的占位符小部件),而不是 QSplitter
。当然,您可以将替代 class 定义为您喜欢的任何内容。
图片更容易理解。
我是Qt新手,需要实现一个监控接口,考虑如下:
- 我有一个主 window,我应该在上面放多个屏幕,qsplitter 似乎是最好的解决方案。
- 该界面为用户提供了更改摄像机数量的选项,因此
QSplitter
在 运行 时间内应该是 created/re-created。
问题是我有太多相机无法为它们预定义小部件,所以我需要动态创建 QSplitter
UI 个实例。
问题是我在使用 Qt Designer
时找不到 QSplitter
classes 并且以编程方式创建 QSplitter
class 无法正常工作,因为 MainWindow
有通过 Qt Designer
(.ui) 创建。
我想听听关于这个问题的任何建议,如果有更好的方法,请告诉我。
在 Qt Designer 中,QSplitter
不是小部件,而是 Layout
。
Select 您想要包含在两个分隔区域中的小部件,然后从上下文菜单(鼠标右键)中 select Layout
- 您将找到两个条目 Layout Horizontally in splitter
和 Layout Vertically in splitter
以垂直或水平拆分器对小部件进行分组。
QSplitter
不是严格的 UI 元素,它本质上是一个控制子元素的父元素。如果你想通过 Designer 完成它,你可能 运行 会很头疼,但基本要点是你 select 一些要由它控制的小部件,然后单击 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
尽管 QSplitter 是一个小部件,但您不能直接在 Qt Designer 中创建它。它仅可用于布置 预先存在的 小部件 - 这不适合您的用例,因为您需要动态创建子小部件。
但是,您可以使用 widget promotion 解决此限制。这是一个简单的机制,允许您添加替代 classes 来表示 Qt Designer 中不直接可用的小部件。这个想法是,您添加一个与您实际想要的最相似的小部件(例如 QFrame
与 QSplitter
最相似),然后将其提升为您想要的替代品 class已经在你自己的头文件中定义了。当 uic 最终生成代码时,它将使用您的替代 class 而不是 Qt Designer 中添加的小部件的 class(它只是作为占位符)。
请注意,当您在 Promoted Widgets 对话框中创建替代 class 时,基础 class 应该是 QFrame
,而不是 QSplitter
。这是因为您正在扩展 QFrame
(即您的占位符小部件),而不是 QSplitter
。当然,您可以将替代 class 定义为您喜欢的任何内容。
图片更容易理解。