C++ 中心小部件占用大量空间,调整大小后将小部件停靠在少数位置

C++ 中心小部件占用大量空间,调整大小后将小部件停靠在少数位置,c++,qt,qmainwindow,qdockwidget,C++,Qt,Qmainwindow,Qdockwidget,我现在正在使用QDockWidget创建一个动态组件,用于安排一些用户定义的绘图。这些图的大小应该改变,并且可以排列在彼此的顶部 以下代码片段说明了我试图实现的目标: #include <QApplication> #include <QMainWindow> #include <QLabel> #include <QDockWidget> int main(int argc, char *argv[]) { QApplication a

我现在正在使用
QDockWidget
创建一个动态组件,用于安排一些用户定义的绘图。这些图的大小应该改变,并且可以排列在彼此的顶部

以下代码片段说明了我试图实现的目标:

#include <QApplication>
#include <QMainWindow>
#include <QLabel>
#include <QDockWidget>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    auto window = new QMainWindow;
    window->setCentralWidget(new QLabel("Central Widget"));

    for (int i = 1; i < 9; i++) {
        auto dock = new QDockWidget(QString("Plot %1").arg(i));
        dock->setWidget(new QLabel(QString("Plot %1").arg(i)));
        dock->setAllowedAreas(Qt::AllDockWidgetAreas);
        window->addDockWidget(Qt::BottomDockWidgetArea, dock);
    }

    window->show();
    return app.exec();
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
自动窗口=新的QMainWindow;
窗口->setCentralWidget(新的QLabel(“中心小部件”);
对于(int i=1;i<9;i++){
自动停靠=新的QDockWidget(QString(“绘图%1”).arg(i));
dock->setWidget(新的QLabel(QString(“绘图%1”).arg(i));
dock->setAllowedAreas(Qt::AllDockWidgetAreas);
窗口->addDockWidget(Qt::BottomDockWidgetArea,dock);
}
窗口->显示();
返回app.exec();
}
中央小部件仅用作一个简单的占位符,仅用于拖动和重新排列
QDockWidget

除了一个缺点之外,我已经对所取得的成绩非常满意了。调整
窗口的大小后(使其变大),中心小部件将占用所有新获得的空间,而dockwidget仍然像以前一样占用相同的空间

行为描述如下:

这对用户来说有点烦人,因为中心小部件只是一个占位符。实际上,我只是想让这个行为反过来,也就是说,中央小部件应该保持其大小,而dockwidget应该放大


如何实现这一点?

只需将中心小部件调整到所需大小即可。或者更好的是,隐藏它(除了这个,您似乎只使用了
QDockWidget
s)


适用于我的w/qt 5.8

感谢您的快速回复。我已经试图隐藏中央部件。但是,您将无法再拖动dock小部件。另外,将最大大小设置为非常小(0,0)会禁用在dock窗口小部件周围拖动的功能。您不再能够拖动dock窗口小部件是什么意思?当然,如果我更改为
auto-label=new-QLabel(“中心小部件”);标签->设置最大尺寸(0,0)我仍然可以拖动dock小部件。没错。现在尝试从左到右对齐所有小部件。然后你就不能再从上到下对齐了。哦,我明白了。添加此行:
window->setDockNestingEnabled(true)酷!现在的用法有点不同了。我把中央部件藏起来了<代码>标签->隐藏()之后,我可以自由地安排我的情节,因为我喜欢和筑巢似乎也是一个很好的拥有。再次感谢。
QLabel* label = new QLabel("Central Widget");
label->hide();
window->setCentralWidget(label);
window->setDockNestingEnabled(true);
centralWidget()->hide(); // enable full dock space