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

问题描述 投票:1回答:1

我试图根据下面图1中的以下布局来定位N.5 QDockWidget

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

有人可以解释如何实现图1的布局吗?谢谢你指出了正确的方向

qt qt5 qmainwindow 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();
}

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.