防止 QDockWidget 自动调整大小行为

Prevent QDockWidget autosizing behaviour

Qt 5.5.0

在我的应用程序中,我有一个 QGraphicsView 作为主要小部件和一个 QDockWidget 作为属性。 目标是让用户 select 图形视图中的项目,并根据项目显示该项目的适当属性。

我通过拥有一个属性管理器小部件以及包含每个属性小部件的布局来实现这一点。我连接了信号和插槽以获取当前 selected 项目,然后显示()我需要的小部件并隐藏()其余部分。

效果很好!但是,当 select 显示不同的项目时,停靠栏会根据显示的小部件缩小或增大。这非常刺耳,而且很烦人。问题是,当用户手动调整停靠栏大小时,它会保持该大小。我希望保持大小为默认大小而不是这种自动调整行为。


我尝试过的事情:

我试过更改扩展坞和主窗口的 sizePolicy():无效。

我已经为我的属性管理器设置了一个最小大小,这确实可以防止显示较小的属性集时停靠栏缩小。但是,我仍然希望用户能够根据需要将扩展​​坞缩小到更小的尺寸,而这种方法可以防止...


结论:

当用户调整停靠栏大小时,是否设置了标志或其他内容以告知其保持该大小?如果是这样,有没有办法手动设置它?

我还没有尝试子类化 QDockWidget 或 QMainWindow。是否有我可以覆盖以实现正确行为的方法?

感谢您的帮助!

只需要打电话

setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);

在我的属性管理器小部件(QDockWidget 的中央小部件)的构造函数中

我还将 sizeHint() 函数重载到 return 可观的默认大小。

首先,创建停靠小部件:

QDockWidget *dock = new QDockWidget;

现在将大小策略设置为停靠的小部件。

如果底座是垂直的:

dock->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);

如果底座是水平的:

dock->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);

将您的小部件设置为停靠:

QWidget *myWidget = new QWidget;
dock->setWidget(myWidget);

现在将大小策略设置为停靠的小部件。

如果底座是垂直的:

dock->widget()->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);

如果底座是水平的:

dock->widget()->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);

最后,将 dock 添加到 main window:

如果底座是垂直的:

mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);
mainWindow->resizeDocks({dock}, {0}, Qt::Horizontal);

如果底座是水平的:

mainWindow->addDockWidget(Qt::TopDockWidgetArea, dock);
mainWindow->resizeDocks({dock}, {0}, Qt::Vertical);