【问题标题】:QDockWidget in QMdiArea subwindow not dockable on top and bottomQMdiArea 子窗口中的 QDockWidget 不能停靠在顶部和底部
【发布时间】:2016-06-02 12:32:30
【问题描述】:

在我当前的项目中,我实现了一个带有多个 MDI 表单的 Qt 应用程序,其中包含多个 QDockWidgets。

应用程序大致如下:

这里是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();
}

我对程序的行为方式和功能非常满意。但是有一个缺点:即使我能够将停靠小部件停靠在左侧和右侧,我也无法将它们停靠在顶部和底部。

希望这里有人可以帮助我。我真的很需要这个功能。

【问题讨论】:

    标签: c++ qt qmainwindow qdockwidget qmdiarea


    【解决方案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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多