防止QDockWidget自动调整行为

时间:2016-01-01 02:13:40

标签: c++ qt qdockwidget

Qt 5.5.0

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

我通过使用包含每个属性小部件的布局的属性管理器小部件来实现此目的。我有信号和插槽连接到获取当前选定的项目,然后show()我需要的小部件和隐藏()其余的。

这很棒!但是,在选择不同的项目时,Dock会根据显示的小部件缩小或增长。这是非常刺耳的,而且很烦人。但事实是,当用户手动调整扩展坞大小时,它会保持该大小。我希望维护的大小是默认值,而不是这种自动调整行为。

我尝试过的事情:

我已尝试更改停靠栏和主窗口的sizePolicy():无效。

我为我的物业管理员设定了最小尺寸,这确实可以防止码头在显示较小的属性集时收缩。但是,我仍然希望用户能够根据需要将底座缩小到更小的尺寸,这种方法可以防止...

结论:

当用户调整扩展坞的大小时,是否设置了一个标志或某些东西,告诉它保持该大小?如果是这样,有没有办法手动设置它?

我还没有尝试过继承QDockWidget或QMainWindow。是否有一种方法可以覆盖以实现正确的行为?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

所有必要的就是致电

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

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

我还重载了sizeHint()函数以返回可观的默认大小。

答案 1 :(得分:1)

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

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);

最后,将停靠栏添加到主窗口:

如果基座是垂直的:

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

如果基座是水平的:

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