在QMdiArea子窗口中使用QDockWidget不能在顶部和底部停靠

3
在我的当前项目中,我使用Qt实现了一个应用程序,其中包含多个MDI表单,这些表单包含多个QDockWidget。
该应用程序大致如下所示:

Blueprint of my application

这里是代码片段:

#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个回答

1
您没有为第二个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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接