如何从 Qt Creator 的 UI 设计器中的其他两个布局之间删除 Qt 布局?

Posted

技术标签:

【中文标题】如何从 Qt Creator 的 UI 设计器中的其他两个布局之间删除 Qt 布局?【英文标题】:How to remove Qt layout from between two other layouts in Qt Creator's UI designer? 【发布时间】:2019-05-23 20:56:38 【问题描述】:

我的 Qt 表单中有以下结构:

我怎样才能完全删除VerticalLayout_1,使gridLayout_8 成为page_4 的直接子级和唯一子级?

我尝试从右键菜单中选择删除,但这也会删除VerticalLayout_1 的子项。我还尝试在拖放界面中移动gridLayout_8,但由于它是verticalLayout_1 的唯一子项,我无法将其移动到page_4.

【问题讨论】:

您是否尝试在树视图中移动它(屏幕截图中的那个)? @Mike Afaik 树视图不支持拖放移动对象。至少我还没想出办法。 【参考方案1】:

一种可能的方法是手动编辑.ui XML 文件以删除不需要的布局。如果您在编辑器中打开您的 XML 文件,您应该会发现如下内容:

...
<layout class="QGridLayout" name="page_4">
 <item row="0" column="0">
  <!-- below is the layout you want to remove -->
  <layout class="QVBoxLayout" name="verticalLayout_1">
   <item>
    <layout class="QGridLayout" name="gridLayout_8">
      ...
    </layout>
   </item>
  </layout>
 </item>
</layout>
...

在您的情况下,您只需删除&lt;layout&gt; 标记及其&lt;item&gt; 子级,以便gridLayout_8 成为&lt;item&gt;&lt;item&gt; 的直接子级,即:

...
<layout class="QGridLayout" name="page_4">
 <item row="0" column="0">
  <layout class="QGridLayout" name="gridLayout_8">
      ...
  </layout>
 </item>
</layout>
...

之后,您可以在 QtCreator 中重新打开 XML 文件,以确保一切正常。

我不确定是否有更简单的方法可以从 QtCreator 获得相同的结果。如果您知道,请随时添加答案。

【讨论】:

谢谢!这很容易做到,尽管我希望它可以直接从 UI 编辑器中完成。【参考方案2】:

选择起来可能很棘手,但在表单中,您应该能够选择 gridLayout_8 作为一个单元并将其拖到 page_4 布局中。这将使verticalLayout_1 仍然存在,但为空,然后您可以轻松将其删除。如果 gridLayout_8 布局的边距为零,则可能无法选择;您必须将边距设置为某个值,以便 gridLayout_8 的边框与 verticalLayout_1 的边框分开。

我一直在拖动布局。困难的部分是确保选择布局而不是其中的某些内容。如果你掉错地方或抓错东西,请准备好撤消并重试。

【讨论】:

是的,我试过这样做,但这只是一个巨大的痛苦,我希望有更好的方法。 如果您可以在这种情况下在树中拖放,那就太好了,但我不相信还有其他方法。

以上是关于如何从 Qt Creator 的 UI 设计器中的其他两个布局之间删除 Qt 布局?的主要内容,如果未能解决你的问题,请参考以下文章

Qt Creator - 如何查看设计器的代码?

qt creator 使用Ui文件的问题

在qt creator中用ui设计器创建了一个QDialog的窗口,添加了一个QWidget部件,怎么能在Qwidget上用QPainter

qt creator 中 ui文件 怎么用编译界面修改?

如何完全禁用 Qt Creator 中的 QML 调试器?

在 Qt 创建器中向表视图添加仅可读行