【问题标题】:In Qt/QML, how to load different images for different device densities (Android)在 Qt/QML 中,如何为不同的设备密度加载不同的图像(Android)
【发布时间】:2015-06-10 23:07:26
【问题描述】:

我正在使用 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、...)加载不同的图像。如果是这样,目录结构应该如何?

【问题讨论】:

    标签: android qt qml qtquick2


    【解决方案1】:
    Image {source: "logo" + density + ".png" }
    

    density 可以是例如 S、M、L,而您有 logoS.pnglogoM.pnglogoL.png。或者您可以使用它来指定不同的路径而不是图像名称。无论哪种方式。

    您可以使用QScreenlogicalDotsPerInch 属性并将其公开给QML 以确定density 的值。

    此外,如果图像足够大,您实际上可以只发送较大的版本并根据需要缩小它。它会更容易,而且您不会被限制在特定的尺寸。

    【讨论】:

    • 我知道你要去哪里。我不确定当必须同时支持 iOS 和 Android 时这是如何工作的。这种方法的缺点还在于它将[选择正确图像]的责任转移到了 QML 应用程序(而对于依赖于操作系统的图像或 iOS 密度,底层 QFileSelector 似乎可以管理这个)。
    • 就是这样 - 它适用于每个操作系统,它不是特定于平台的解决方案,因此它适用于任何地方。是谁做的并不重要,关键是要完成它。您可以在自己的组件中包装 Image,并使用 QML 单例实现更透明的路径修改,如果您愿意的话。
    • 好点!所以我们的想法是只使用这种方法(而不是,正如我首先理解的那样,将您的方法用于 Android 和现有的 iOS 方法)。遗憾的是,Qt 的内置支持似乎几乎完成了,但还没有真正可用。
    • @MarcVanDaele - IMO 这对自己来说是微不足道的事情,并不需要专门的支持。另外,您始终可以调整自己的实施方案并为其设置例外,而使用“库存”的东西,您将保留默认行为,这可能并不总是适合您。只需将不同的 DPI 图像放在不同的文件夹中,并将适当的前缀附加到 source 字符串即可。
    【解决方案2】:

    您可以使用Screen.pixelDensity QML 属性计算 ppi,并为不同的 ppi 范围分配不同的图像。可以在KDAB blog post 中找到示例代码:

    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
     }
    

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多