分享

c – QLayout和离散小部件表示 – 如何?

 印度阿三17 2019-09-10

举例来说,我们在QMainWindow中有QHBoxLayout.

让我们在布局上面设置小部件.

但是(!)很少有小部件具有离散的视觉表示.
换句话说,他们几乎没有依赖于可用空间的状态.

例如:

>如果可用空间太多 – 它必须看起来像一些文字的大图像
>如果有可用的最小空间 – 它必须看起来像小图像
>如果可用的空间少于最小空间 – 它必须看起来像按钮标签
>等……

因此,当用户更改主窗口大小时,我们的“动态”小部件必须根据可用空间显示自己的表示.

如何在Qt中实现?

UPD:Microsoft功能区界面中最接近的行为

UPD2:下面的gif中存在的QML最接近的行为(在用户调整窗口大小的部分)

enter image description here

UPD3:更复杂的示例 – 菜单面板中的每个面板都会更改内容元素视图和计数,这取决于可用空间
enter image description here

解决方法:

对于这个答案,我将使用Qt等效术语,而不是官方MS Ribbon术语.

概述

您实际上正在查看许多布局,其模式如下:

QToolbar
| (Layout)
 --> QGroupBox/QToolButton
|     | (Layout)
|      ----->Button
|      ----->Button
 --> QGroupBox/QToolButton

模式

让我们从填充的QGroupBox开始,帮助将按钮分组.

考虑我们的组框可能同时包含我们的动态QToolButton和常规小部件.当可用空间缩小时,布局:

>计算固定大小的小部件所需的最小空间以及没有固定大小策略的小部件的minimumSizeHint()值.
>根据每个小部件的增长策略分配剩余空间.
>但是,我们的动态工具按钮可能会或可能不会根据可用空间更改大小.
>现在我们必须使用qobject_cast开始检查布局的子项是否是动态的.
>当我们找到动态按钮时,我们必须确定它是否可以缩小.如果是这样,我们缓存这个及其首选的较小尺寸.
>如果它会缩小,我们必须重新计算最小尺寸.
>然后我们必须继续前进,希望在调整大小期间缩小按钮不会导致任何棘手的打破连接器.
>领带断路器:如果两个按钮可以折叠到更小的尺寸,哪一个是第一个?我们也必须考虑到这一点.此外,MS使用三个按钮的行.我们不能将Qt :: ToolButtonTextBesideIcon中的一个折叠到Qt :: ToolButtonIconOnly,我们必须折叠一组三个.
>三个水平按钮可折叠为三个垂直按钮.这也需要计算和缓存.

还有希望.

我们可以通过使每个容器只能容纳动态工具按钮来简化.然后我们不必处理固定大小的小部件等棘手的问题,我们只需要处理一种类型的小部件.

Microsoft也为我们帮助实现了这种行为.您可以通过经验观察了解布局和子窗口小部件的行为约束.群体何时崩溃?如果一个组崩溃,其他组是否会扩展以占用空间? (顺便说一句,答案是否定的.)按钮在崩溃时如何组合在一起?它们是如何崩溃和扩展(对它们的扩展和崩溃行为的限制)有一些特殊之处吗?

Qt还实施了多种布局供我们学习,并了解它们的工作原理以及它们的不同之处. QGridLayout是一个很有前途的基础,特别是如果你做一些数学运算来动态改变小部件的行间距(这是为了将按钮分组,因为它们从垂直布局折叠到三个水平按钮的集合).

综上所述

完全回答你的问题太过广泛,无法在SO上发表主题,但我希望这些信息可以指导你到达目的地.

来源:https://www./content-4-446301.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多