【问题标题】:Getting QDockWidget layout right正确获取 QDockWidget 布局
【发布时间】:2013-11-07 06:28:59
【问题描述】:

我大量使用停靠小部件来让用户按照她想要的方式安排工具。我的一些停靠小部件包含静态控件(FS,固定垂直尺寸),其他描绘图像,越大越好(ES,扩展垂直尺寸)。

我面临的问题是我无法获得让我这样做的尺寸提示配置:

  1. 使可变大小的dockwidget尽可能大
  2. 让所有的dockwidgets标签页没有错误的行为

对于 1.,我可以将所有 FS 的内容小部件的垂直策略设置为“固定”。这将强制容器将所有可用空间用于可变大小的小部件。但是,一旦 ES 小部件与 FS 小部件一起被标记,而 FS 小部件未显示,我充其量是顽固的行为(用户无法调整大小)和最坏的错误行为(调整大小时,会发生绘图错误,实际大小没有改变)。

对于 2.,我可以将所有垂直策略设置为“首选”(FS)或“扩展”(ES)。这应该优先考虑 ES,但事实并非如此。我还尝试过使用 Vertical Stretch 进行操作(虽然它在其他不涉及 DockWidgets 的情况下很有帮助)。

我遇到了这样一种情况:默认情况下,应用程序会浪费空间,并且每当窗口大小/布局发生变化时,用户都必须对 dockwidget 大小进行多次调整。这是非常乏味和违反直觉的。

我该怎么做?

还有一个后续问题:如何告诉 DockWidget 它的内容具有特定的纵横比?

【问题讨论】:

  • 我怀疑是否有解决方案。 QDockWidget 的行为是硬编码的,控制它的选项太少。如果您想完全控制停靠小部件的行为,您需要自己实现它。

标签: qt qt4 qdockwidget qlayout


【解决方案1】:

我发现最大的问题是我使用自定义小部件进行显示,不会使virtual QSize sizeHint() const 方法过载。

重载此方法并返回一个高数,例如500,对于垂直尺寸,对布局有很大帮助。

似乎(私有 API)QMainWindowLayout 对最佳停靠小部件大小进行了初步猜测,然后坚持下去。在同一门课程中,它似乎忽略了首选和扩展策略或拉伸设置之间的差异。

通过提供较大的 sizeHint,自定义小部件可以与具有相同功能的库存 Qt 小部件(例如 QListView)取得更好的平衡。

结果可以接受,但远非完美。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多