防止QDockWidget自动调整大小的行为。

5

Qt 5.5.0

我的应用程序中,我有一个QGraphicsView作为主窗口小部件和一个QDockWidget用于属性。

目标是让用户选择图形视图中的项目,并根据项目呈现适当的属性。

我通过具有包含每个属性小部件的布局的属性管理器小部件来实现这一目标。我已经连接了获取当前选定项目的信号和插槽,然后显示所需的小部件并隐藏其他小部件。

这个方法非常好用!但是,当选择不同的项时,停靠窗口会根据所显示的小部件而缩小或扩大。这非常令人不安,而且相当烦人。但是,当用户手动调整停靠窗口大小时,它会保持该大小。我希望保持的大小是默认值,而不是自适应大小。


我尝试过的事情:

我尝试更改停靠窗口和主窗口的sizePolicy():没有效果。

我设置了属性管理器的最小大小,确实防止了在显示较小的属性集时停靠窗口的缩小。但是,我仍然希望用户可以将停靠窗口缩小到更小的大小,而此方法则阻止了这一点...


结论:

是否有一个标志或其他东西,当用户调整停靠窗口大小时可以告诉它保持该大小?如果是这样,是否有一种手动设置的方法?

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

感谢您的帮助!


这里 可能会给你一些信息。 - LogicStuff
2
@LogicStuff 非常感谢,QSizePolicy::Ignored 就是我需要的 :) - Garrett Fleischer
1
如果我有更多的赞,就能给你了——这正是我所需要的信息。 - Rich von Lehe
2个回答

3

只需要调用即可完成

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

在我的属性管理器窗口部件(QDockWidget的中心窗口部件)的构造函数中

我还重载了sizeHint()函数以返回一个合适的默认大小。


2

首先,创建您的停靠窗口小部件:

QDockWidget *dock = new QDockWidget;

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

如果停靠窗口是垂直的:

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

如果 dock 是水平的:最初的回答。
dock->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);

将您的小部件设置为停靠:
QWidget *myWidget = new QWidget;
dock->setWidget(myWidget);

现在将大小策略设置为停靠窗口的小部件。
如果停靠窗口是垂直的:
dock->widget()->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);

如果dock是水平的:最初的回答
dock->widget()->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);

最初的回答:
最后,将dock添加到主窗口中:
如果dock是垂直的:
mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);
mainWindow->resizeDocks({dock}, {0}, Qt::Horizontal);

如果dock是水平的:最初的回答
mainWindow->addDockWidget(Qt::TopDockWidgetArea, dock);
mainWindow->resizeDocks({dock}, {0}, Qt::Vertical);

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