【问题标题】:Qt - How to set minimum size on a container so it doesn't distort childrenQt - 如何在容器上设置最小尺寸,以免扭曲孩子
【发布时间】:2019-02-07 14:13:23
【问题描述】:

我有一个 QWidget 容器(实际上是一个 QFrame),里面有一些小部件。此容器的内容(子窗口小部件的数量和/或大小)可能会动态变化。容器本身位于滚动区域中。

通常,容器会根据其内容适当调整大小(增大或缩小)。这行得通。

不过,我还需要在这个容器上设置一个最小尺寸,这样它就不会缩小太多。也就是说,容器的最小尺寸应该是: max(my_minimum_size, contents_size)。 这就是问题所在。

如果我使用 container->setMinimumSize(200, 200); 并且内容的大小大于 (200, 200),容器仍然可以调整为 (200, 200)(与之前不同),其内容大小被忽略并被扭曲或截断。

有没有办法解决这个问题?我正在使用 Qt 5.9。

更新:这个Qt Designer UI file 正是我的意思。在容器上设置了minimumSize,调整其大小会使按钮变形。

【问题讨论】:

  • 这可能就是您要寻找的答案:stackoverflow.com/a/21265287/1329652
  • @KubaOber 谢谢,但我不这么认为。另外,我根本不想限制容器的最大尺寸。事实上,我希望它尽可能地增长。
  • 该答案中没有任何内容限制容器大小。事实上,解决的问题是如何确保容器总是尽可能大,而不是更大,以及如何将它传递给滚动视图。试试这个例子,它有效。
  • @KubaOber “没有更大的” - 就是这样,我希望它尽可能地增长。我只希望限制它,使其始终至少具有某个 (w,h) 大小,同时不扭曲其子级。您使用 QLayout::SetMinAndMaxSize,这限制了它的增长。您也从不指定任何定义的尺寸,我需要 200x200!
  • 既然容器在滚动区域,它必须有一个确定的大小:它不能任意增长。滚动区域中没有“尽可能大”的概念:事物可以随心所欲,受小部件系统的限制(2^16-1 限制?)。因此,在我们进一步讨论之前,您必须明确“尽可能多地增长”的含义。

标签: c++ qt layout qt5 qlayout


【解决方案1】:

我在 Qt 中心得到了答案:

https://www.qtcentre.org/threads/70015-Set-minimum-size-of-a-container-without-distorting-its-children

  1. 创建 QFrame 的子类
  2. 覆盖 minimumSizeHint() 以便它从基类中获取值并扩展它。

类似:

QSize MyFrame::minimumSizeHint() const override
{
    const QSize baseSize = QFrame::minimumSizeHint();
    return baseSize.expandedTo(QSize(200, 200));
}

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 2012-11-23
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多