具有缩放图像的GridLayout具有巨大的行间距
我在qml中有一个简单的“对话框”,用户应该在其中选择一个图像。图像被缩小并显示在ScrollView内的GridLayout中。图像应该是scrollview的1/2宽度,旁边会有描述 我看到的是,垂直间距很大,并且不会随着窗口大小的改变而改变。实际上,间距似乎对应于全尺寸(未缩放)图像 当我设置Layout.preferredHeight:100(例如)时,问题会发生变化,但是如果图像的间距小于该值,并且高度不会超过100px,则间距也会随之改变。我想在不假设任何绝对尺寸的情况下解决这个问题 如何解决这个问题 在您的示例中:具有缩放图像的GridLayout具有巨大的行间距,layout,qml,Layout,Qml,我在qml中有一个简单的“对话框”,用户应该在其中选择一个图像。图像被缩小并显示在ScrollView内的GridLayout中。图像应该是scrollview的1/2宽度,旁边会有描述 我看到的是,垂直间距很大,并且不会随着窗口大小的改变而改变。实际上,间距似乎对应于全尺寸(未缩放)图像 当我设置Layout.preferredHeight:100(例如)时,问题会发生变化,但是如果图像的间距小于该值,并且高度不会超过100px,则间距也会随之改变。我想在不假设任何绝对尺寸的情况下解决这个问题
将使用图像的实际大小Image{source:“assets/”+src}
将限制图像显示区域的宽度。因此,大图像将以300px(.5*scroll.width)的宽度显示,但将保留其高度Layout.preferredWidth:.5*滚动.width
fillMode:Image.preserveApectFit代码>将均匀缩放图像以适合300px。图像的比例现在在视觉上正常,但
属性的值保持不变,布局将使用该值height
sourceSize
属性强制元素的宽度(高度将重新计算):
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
ApplicationWindow{
id: root
width: 600
height: 1200
visible: true
ScrollView {
id: scroll
anchors.fill: parent
ListModel{
id: demosModel
ListElement{ src:"01.jpg"; }
ListElement{ src:"02.jpg"; }
ListElement{ src:"03.jpg"; }
ListElement{ src:"04.jpg"; }
}
GridLayout{
anchors.fill: parent
columns: 1
rowSpacing: 10
Repeater{
model: demosModel
Image {
source: "assets/" + src;
Layout.preferredWidth: .5 * scroll.width;
// Qt documentation: "If only one dimension of the size is set to greater
// than 0, the other dimension is set in proportion to preserve the
// source image's aspect ratio. (The fillMode is independent of this.)"
// fillMode: Image.PreserveAspectFit;
sourceSize.width: Layout.preferredWidth
}
}
}
}
}
在您的示例中:
将使用图像的实际大小Image{source:“assets/”+src}
将限制图像显示区域的宽度。因此,大图像将以300px(.5*scroll.width)的宽度显示,但将保留其高度Layout.preferredWidth:.5*滚动.width
fillMode:Image.preserveApectFit代码>将均匀缩放图像以适合300px。图像的比例现在在视觉上正常,但
属性的值保持不变,布局将使用该值height
sourceSize
属性强制元素的宽度(高度将重新计算):
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
ApplicationWindow{
id: root
width: 600
height: 1200
visible: true
ScrollView {
id: scroll
anchors.fill: parent
ListModel{
id: demosModel
ListElement{ src:"01.jpg"; }
ListElement{ src:"02.jpg"; }
ListElement{ src:"03.jpg"; }
ListElement{ src:"04.jpg"; }
}
GridLayout{
anchors.fill: parent
columns: 1
rowSpacing: 10
Repeater{
model: demosModel
Image {
source: "assets/" + src;
Layout.preferredWidth: .5 * scroll.width;
// Qt documentation: "If only one dimension of the size is set to greater
// than 0, the other dimension is set in proportion to preserve the
// source image's aspect ratio. (The fillMode is independent of this.)"
// fillMode: Image.PreserveAspectFit;
sourceSize.width: Layout.preferredWidth
}
}
}
}
}
以这种方式定义映像{code>Image{source:src;sourceSize.width:.5*scroll.width;fillMode:Image.preserveApectFit;}无法解决您的问题?它可以:)您如何知道这一点?我发现布局、大小调整等本质上是神秘的,我钦佩那些看到背后逻辑的人。请重新发布作为答案,以便我可以接受:)我经常遇到与项目大小和布局相关的错误。我终于开始理解如何解决这些问题,但我并不总是理解它们。当我找到时间来深化这件事时,我试着从Qt的源代码中看到,但这并不总是容易的…:)以这种方式定义映像{code>Image{source:src;sourceSize.width:.5*scroll.width;fillMode:Image.preserveApectFit;}无法解决您的问题?它可以:)您如何知道这一点?我发现布局、大小调整等本质上是神秘的,我钦佩那些看到背后逻辑的人。请重新发布作为答案,以便我可以接受:)我经常遇到与项目大小和布局相关的错误。我终于开始理解如何解决这些问题,但我并不总是理解它们。当我找到时间来深化这件事时,我试着从Qt的源代码中看到,但这并不总是容易的…:)我感谢你的解释。谢谢我感谢你的解释。谢谢