【发布时间】:2018-08-28 18:36:39
【问题描述】:
我在 qml 中有一个简单的“对话框”,用户应该在其中选择一个图像。图像按比例缩小并显示在 ScrollView 内的 GridLayout 中。图片应该是scrollview的1/2宽度,旁边会有说明。
我看到的是垂直间距很大,并且不会随着调整窗口大小而改变。实际上,间距似乎对应于全尺寸(未缩放)图像。
当我设置 Layout.preferredHeight: 100(例如)时,问题发生了变化,但是如果图像小于该间距,并且高度不要超过 100 像素,那么间距就会再次出现。我想在不假设任何绝对尺寸的情况下解决这个问题。
如何解决?
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
ApplicationWindow{
visible: true
id: root
width: 600
height: 1200
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;
fillMode: Image.PreserveAspectFit;
}
}
}
}
}
【问题讨论】:
-
以这种方式定义您的图像
Image { source: src; sourceSize.width: .5 * scroll.width; fillMode: Image.PreserveAspectFit; }不能解决您的问题? -
确实如此 :) 你怎么知道的?我发现布局、调整大小等本质上是神秘的,我钦佩那些看到背后逻辑的人。请重新发布作为答案,以便我可以接受:)
-
我经常遇到与项目大小和布局相关的错误。我终于开始了解如何解决这些问题,但我一直不了解它们。有时间再深入一点,我试着在Qt的源代码中看看,但并不总是那么容易... :)