qt - 如何使用 QML 布局在网格中排列纵横比缩放的项目?

标签 qt layout qml aspect-ratio layout-anchor

我有具有一定纵横比的矩形和具有反纵横比的矩形。我想将它们排列在我选择的网格布局中(不需要是常规网格,相反:我更喜欢可以随意构建 RowLayoutColumnLayout 的解决方案)。

我知道我可以使用 Layout.fillHeight 在我的布局中缩放项目和 Layout.fillWidth .不幸的是,我找不到为我的Rectangle 正确定义纵横比的方法。 s。我知道 QML Image可以做到(通过它的 fillMode 属性),但我认为没有简单的方法可以很好地做到这一点。

任何正确方向的帮助或指示将不胜感激!

注意我假设 QML 布局是要走的路,但如果有一个只有 anchor 或普通 Row 的功能解决方案/Column设置,我全力以赴!

另请注意,我更愿意保留两种类型的 Rectangle 的面积。同样,就像在实验时看起来一样,这并不是那么微不足道...

编辑

我的意思是尝试减去等面积约束。矩形填充宽度,但在高度上留出空间,因为它们受到纵横比和填充宽度的限制。高度也应该如此,但我无法将两者结合起来。

1

最佳答案

我一直在努力寻找正确的方法来做到这一点。
我找不到任何工作示例,所以我编写了自己的示例。

此矩形将始终尊重其目标比率并保持其边距。
这里的诀窍是针对不同的情况进行处理: parent 比例是否大于目标比例。在一种情况下,您将宽度绑定(bind)到父级并根据设置高度。在另一种情况下,您以另一种方式进行。

Rectangle {
    color  : 'green'

    // INPUTS
    property double  rightMargin    : 20
    property double  bottomMargin   : 20
    property double  leftMargin     : 20
    property double  topMargin      : 20
    property double  aimedRatio     : 3/4

    // SIZING
    property double  availableWidth  : parent.width  - rightMargin  - leftMargin
    property double  availableHeight : parent.height - bottomMargin - topMargin

    property bool    parentIsLarge   : parentRatio > aimedRatio

    property double  parentRatio     : availableHeight / availableWidth

    height : parentIsLarge ? width * aimedRatio :  availableHeight
    width  : parentIsLarge ? availableWidth     :  height / aimedRatio

    anchors.top        : parent.top
    anchors.topMargin  : topMargin
    anchors.left       : parent.left
    anchors.leftMargin : leftMargin
}

希望它能帮助通过谷歌搜索到达这里的人!

关于qt - 如何使用 QML 布局在网格中排列纵横比缩放的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41431941/

相关文章:

python - Qt ShortcutOverride 默认 Action

c++ - 从灰度图像到 QImage 的快速转换

android:如何设置当我的 ViewFlipper 显示新子项时触发的监听器

javascript - 我无法在 QML 中滑动屏幕动画

javascript - 使用 QML 和 QtQuick2 时如何将 .js 文件包含在另一个 .js 文件中?不涉及浏览器

qt - 在布局中使用 QSplitter

c++ - 将绑定(bind)到 FBO 的纹理复制到另一个 OpenGL 上下文

html - 为什么一个 child div 将另一个 child 推到它下面?

java - 如何在SWT中为一个TabItem设置scrollcomposite?

c++ - 声明要在qml和cpp文件中使用的全局字符串