如何以特定方式在 QMainWindow 上定位多个 QDockWidget

Posted

技术标签:

【中文标题】如何以特定方式在 QMainWindow 上定位多个 QDockWidget【英文标题】:How to position multiple QDockWidget on QMainWindow in a specific way 【发布时间】:2019-02-28 00:13:27 【问题描述】:

我正在尝试根据下图 1 中的以下布局定位 N.5 QDockWidget

由于某些原因,当我在QMainWindow 上添加第二个和第三个QDockwidget 时,它们的定位方式非常不同,我不明白锚固是否有问题。因此,第四个和第五个QDockWidget 的位置甚至更奇怪。

谁能解释一下如何实现图 1 的布局? 感谢您指出正确的方向

【问题讨论】:

【参考方案1】:

使用 Qt Designer 进行设计:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget"/>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>27</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
  <widget class="QDockWidget" name="dockWidget">
   <attribute name="dockWidgetArea">
    <number>1</number>
   </attribute>
   <widget class="QWidget" name="dockWidgetContents"/>
  </widget>
  <widget class="QDockWidget" name="dockWidget_2">
   <attribute name="dockWidgetArea">
    <number>1</number>
   </attribute>
   <widget class="QWidget" name="dockWidgetContents_2"/>
  </widget>
  <widget class="QDockWidget" name="dockWidget_5">
   <attribute name="dockWidgetArea">
    <number>8</number>
   </attribute>
   <widget class="QWidget" name="dockWidgetContents_3"/>
  </widget>
  <widget class="QDockWidget" name="dockWidget_3">
   <attribute name="dockWidgetArea">
    <number>2</number>
   </attribute>
   <widget class="QWidget" name="dockWidgetContents_6"/>
  </widget>
  <widget class="QDockWidget" name="dockWidget_4">
   <attribute name="dockWidgetArea">
    <number>2</number>
   </attribute>
   <widget class="QWidget" name="dockWidgetContents_7"/>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

使用 C++ 代码:

#include <QtWidgets>

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    QMainWindow w;

    QDockWidget *dock_widget_a = new QDockWidget;
    w.addDockWidget(Qt::LeftDockWidgetArea, dock_widget_a);
    QDockWidget *dock_widget_b = new QDockWidget;
    w.addDockWidget(Qt::LeftDockWidgetArea, dock_widget_b);

    QDockWidget *dock_widget_c = new QDockWidget;
    w.addDockWidget(Qt::RightDockWidgetArea, dock_widget_c);
    QDockWidget *dock_widget_d = new QDockWidget;
    w.addDockWidget(Qt::RightDockWidgetArea, dock_widget_d);

    QDockWidget *dock_widget_e = new QDockWidget;
    w.addDockWidget(Qt::BottomDockWidgetArea, dock_widget_e);

    w.setCentralWidget(new QWidget);
    w.resize(640, 480);
    w.show();
    return a.exec();

【讨论】:

您能解释一下为什么当我拖放QDockWidget 时,它们最终会处于非常奇怪的位置吗?我应该在这个特定对象的属性上锚定一些东西吗? @Emanuele 我建议的 .ui 是我用 Qt Designer 做的,它工作正常,所以我猜你把 QDockWidget 放在了一个不合适的位置

以上是关于如何以特定方式在 QMainWindow 上定位多个 QDockWidget的主要内容,如果未能解决你的问题,请参考以下文章

如何在jQuery中以特定值定位特定属性? [复制]

如何以编程方式使用 Facebook 地理定位?

如何通过使用 C、C++ 在 Linux 上指定其名称以编程方式检查特定守护程序是不是正在运行?

如何以特定格式以编程方式创建pdf?

Gradle:如何在java中以编程方式声明对项目特定配置的依赖关系

如何以编程方式打开 Android 6.0 (Marshmallow) 上特定应用的权限屏幕?