在我目前的项目中,我实现了一个Qt应用程序,其中包含几个包含多个QDockWidget
的MDI表单。
应用程序看起来大致如下:
以下是代码段:
#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();
}
我真的很满意程序的行为和它的作用。但是有一个缺点:即使我能够将底座小部件对接到左侧和右侧,我也无法将它们停靠在顶部和底部。
希望这里有人可以帮助我。我真的需要这个功能。
答案 0 :(得分: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();
}