QMdiArea 子窗口中的 QDockWidget 不能停靠在顶部和底部
Posted
技术标签:
【中文标题】QMdiArea 子窗口中的 QDockWidget 不能停靠在顶部和底部【英文标题】:QDockWidget in QMdiArea subwindow not dockable on top and bottom 【发布时间】:2016-06-02 12:32:30 【问题描述】:在我当前的项目中,我实现了一个带有多个 MDI 表单的 Qt 应用程序,其中包含多个 QDockWidget
s。
应用程序大致如下:
这里是sn-p的代码:
#include <QApplication>
#include <QMainWindow>
#include <QMdiArea>
#include <QDockWidget>
#include <QLabel>
int main(int argc, char *argv[])
QApplication app(argc, argv);
auto window = new QMainWindow;
auto mdi = new QMdiArea;
window->setCentralWidget(mdi);
auto subWindowWidget = new QMainWindow;
mdi->addSubWindow(subWindowWidget);
auto dock1 = new QDockWidget("Dock1");
dock1->setWidget(new QLabel("Label1"));
dock1->setAllowedAreas(Qt::DockWidgetArea::AllDockWidgetAreas);
subWindowWidget->addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea, dock1);
auto dock2 = new QDockWidget("Dock2");
dock2->setWidget(new QLabel("Label2"));
dock2->setAllowedAreas(Qt::DockWidgetArea::AllDockWidgetAreas);
subWindowWidget->addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea, dock2);
window->show();
return app.exec();
我对程序的行为方式和功能非常满意。但是有一个缺点:即使我能够将停靠小部件停靠在左侧和右侧,我也无法将它们停靠在顶部和底部。
希望这里有人可以帮助我。我真的很需要这个功能。
【问题讨论】:
【参考方案1】:您没有将central widget 设置为您的第二个QMainWindow
。要实现您想要的行为,请尝试将您的第一个 QDockWidget
设置为中心小部件。
int main(int argc, char *argv[])
QApplication app(argc, argv);
auto window = new QMainWindow;
auto mdi = new QMdiArea;
window->setCentralWidget(mdi);
auto subWindowWidget = new QMainWindow;
mdi->addSubWindow(subWindowWidget);
auto dock1 = new QDockWidget("Dock1");
dock1->setWidget(new QLabel("Label1"));
dock1->setAllowedAreas(Qt::AllDockWidgetAreas);
subWindowWidget->setCentralWidget(dock1);
auto dock2 = new QDockWidget("Dock2");
dock2->setWidget(new QLabel("Label2"));
dock2->setAllowedAreas(Qt::AllDockWidgetAreas);
subWindowWidget->addDockWidget(Qt::BottomDockWidgetArea, dock2);
window->show();
return app.exec();
【讨论】:
以上是关于QMdiArea 子窗口中的 QDockWidget 不能停靠在顶部和底部的主要内容,如果未能解决你的问题,请参考以下文章
如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?