【问题标题】:How to create QSplitter ui class via qt designer?如何通过 qt 设计器创建 QSplitter ui 类?
【发布时间】:2016-02-08 09:05:14
【问题描述】:

我是 Qt 新手,我需要实现一个监控接口,考虑以下几点:

  1. 我有一个主窗口,我应该在其上放置多个屏幕,qsplitter 似乎是最好的解决方案。
  2. 该界面为用户提供了更改摄像头数量的选项,因此应在运行时创建/重新创建QSplitter

问题是我有太多相机无法为它们预先定义小部件,所以我需要动态创建QSplitter UI 实例。 问题是我在使用Qt Designer 时找不到QSplitter 类,并且以编程方式创建QSplitter 类不起作用,因为MainWindow 是通过Qt Designer (.ui) 创建的。 我想听听关于这个问题的任何建议,如果有更好的方法,请告诉我。

【问题讨论】:

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


    【解决方案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 splitterLayout Vertically in splitter 将小部件垂直分组或在水平拆分器中。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

          图片更容易理解。

          【讨论】:

            猜你喜欢
            • 2011-06-18
            • 2011-05-24
            • 2011-09-29
            • 1970-01-01
            • 2020-01-13
            • 2018-08-17
            • 2012-11-05
            • 2020-10-03
            • 1970-01-01
            相关资源
            最近更新 更多