如何通过q​​t designer创建QSplitter ui类?

时间:2016-02-08 09:05:15

标签: c++ qt user-interface qt-designer

我是Qt的新手,我需要实现一个监控界面,并考虑以下因素:

  1. 我有一个主窗口,我应该放置多个屏幕,qsplitter似乎是最好的解决方案。
  2. 界面为用户提供了更改摄像机数量的选项,因此应在运行时创建/重新创建QSplitter
  3. 问题是我有太多的摄像头来为它们预定义小部件,所以我需要动态创建QSplitter UI实例。 问题是,在使用QSplitter时我无法找到Qt Designer类,并且以编程方式创建QSplitter类无效,因为MainWindow已通过{{1}创建(.ui)。 我想听听有关这个问题的任何建议,如果有更好的方法,请告诉我。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在Qt Designer中,QSplitter不是小部件,而是Layout

选择要包含在两个拆分器区域中的小部件,然后从上下文菜单中选择Layout(鼠标右键) - 您将找到两个条目Layout Horizontally in splitterLayout Vertically in splitter到将小部件分组为垂直分割器或水平分割器。

答案 2 :(得分:0)

虽然QSplitter是一个小部件,但您无法直接在Qt Designer中创建一个小部件。它仅适用于布置预先存在的小部件 - 这不适合您的用例,因为您需要动态创建子小部件。

但是,您可以使用widget promotion解决此限制。这是一种简单的机制,允许您添加替换类来表示Qt Designer中不能直接使用的窗口小部件。这个想法是你添加一个与你真正想要的小部件最相似的小部件(例如QFrameQSplitter最相似),然后将它提升到你在你的定义中的替代类自己的头文件。当uic最终生成代码时,它将使用您的替代类而不是Qt Designer中添加的小部件类(它只是作为占位符)。

请注意,在“推荐的窗口小部件”对话框中创建替代类时,基类应为QFrame,而不是QSplitter。这是因为您正在扩展QFrame(即占位符窗口小部件),而不是QSplitter。当然,您可以将替代课程定义为您喜欢的任何内容。

答案 3 :(得分:0)

图像更容易理解。 enter image description here