[英]In Qt/QML, how to load different images for different device densities (Android)
我正在使用Qt 5.4和Qt Creator 3.3.2。
根据当前的操作系统,可以使用加载不同的图像
Image {source: "logo.png" }
和以下资源
logo.png
+windows/logo.png
+android/logo.png
+ios/logo.png
如果我正确理解文档,请添加
+ios/logo.png
+ios/logo@2x.png
+ios/logo@3x.png
将在iOS上根据设备密度选择不同的图像。
我可以使用类似的机制为不同的Android dpi(ldpi,mdpi,hdpi,xhdpi,...)加载不同的图像。 如果是这样,目录结构应该如何?
Image {source: "logo" + density + ".png" }
density
可以是S,M,L,你有logoS.png
, logoM.png
和logoL.png
。 或者您可以使用它来指定不同的路径而不是图像名称。 无论哪种方式。
您可以使用QScreen
的logicalDotsPerInch
财产和揭露,为QML,以确定价值density
。
此外,如果图像足够大,您实际上可以放弃只运送较大版本并根据需要缩小图像。 它会更容易,您不会受限于特定尺寸。
您可以使用Screen.pixelDensity
QML属性计算ppi,并为不同的ppi范围分配不同的图像。 可以在此KDAB博客文章中找到示例代码:
property int ppi: Screen.pixelDensity*25.4
property var dir: ["MDPI","HDPI","XHDPI","XXHDPI",
"XXXHDPI","XXXXHDPI"]
readonly property int ppiRange:{
if (ppi>=540)
5
else if (ppi>=360)
4
else if (ppi>=270)
3
else if (ppi>=180)
2
else if (ppi>=135)
1
else
0
}
BorderImage {
id: scalableElement3
source: "./Images/" + dir[ppiRange] + "/image.png"
width: parent.width-ppi/2
height: ppi*1.5
anchors.centerIn: parent
border.left: 0.3*ppi; border.top: 0.3*ppi
border.right: 0.18*ppi; border.bottom: 0.18*ppi
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.