繁体   English   中英

在Qt / QML中,如何为不同的设备密度加载不同的图像(Android)

[英]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.pnglogoM.pnglogoL.png 或者您可以使用它来指定不同的路径而不是图像名称。 无论哪种方式。

您可以使用QScreenlogicalDotsPerInch财产和揭露,为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM