网站首页 > 知识剖析 正文
在阅读本文之前,读者可以先了解一下我之前发布的一篇有关像素密度计算的文章《Qt for Android屏幕DPI计算方法》。
在前面的文章中描述了计算手机DPI的方法,这里需要提醒大家的是,即使通过设备的像素密度值,选取了正确的图片资源文件夹,在QML移动开发中,也还是需要对图片大小做一个换算处理。请看下面代码片段:
import QtQuick 2.12
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.12
import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.2
...
Image {
id: backgoundImage
anchors.fill: parent
width: sourceSize.width/Screen.devicePixelRatio
height: sourceSize.height/Screen.devicePixelRatio
source: "qrc:/img-res/"+appEngine.resourceFolder()+"/signin_bg.png"
}
...
sourceSize.width得到的是图片的像素宽度,用它除以设备像素比值(请看我前面发表的文章),得到设备无关像素值。为什么需要这样做呢?在QML for Android开发中,对象的宽度和高度的单位不是像素,而是设备无关像素值(强调:这里指移动开发,而不是桌面开发)。可以这样证明:在1080x1920像素分辨率的手机上,如果读者在QML代码中创建一个矩形或者图片对象,并把它的宽高分别设置为1080和1920,可以发现这个矩形或者图片的右边和下边,远远的显示到了屏幕的外面,而通过下面代码得到的宽高,才是真正刚好铺满屏幕的宽高,这个宽高是与设备无关的:
QRect screenRect = QGuiApplication::primaryScreen()->geometry();
int screenW = screenRect.width();
int screenH = screenRect.height();
appEngine.resourceFolder()这是从C++代码中获取的图片资源文件夹名称,把它拼接在QML代码中的图片资源路径中,它是通过DPI而决定的,请看下面代码:
void Engine::uiInit()
{
int dpi = this->getScreenDPI();
qDebug()<<__LINE__<<__FUNCTION__<<"this->getScreenDPI() = "<<dpi;
if(80 <= dpi && dpi < 120)
m_resourceFolder = "ldpi";
else if(120 <= dpi && dpi < 160)
m_resourceFolder = "mdpi";
else if(160 <= dpi && dpi < 240)
m_resourceFolder = "hdpi";
else if(240 <= dpi && dpi < 320)
m_resourceFolder = "xhdpi";
else if(320 <= dpi && dpi < 480)
m_resourceFolder = "xxhdpi";
else if(480 <= dpi && dpi < 640)
m_resourceFolder = "xxxhdpi";
qDebug()<<__LINE__<<__FUNCTION__<<"m_resourceFolder = "<<m_resourceFolder;
}
QString Engine::resourceFolder()
{
return m_resourceFolder;
}
不同DPI设备的图片资源保存方法:
- 上一篇: 超详细讲解IJKPlayer的播放器实战和源码分析(1)
- 下一篇: PC端页面适应不同的分辨率的方法
猜你喜欢
- 2025-01-02 界面交互篇:个人中心页布局样式与逻辑交互开发
- 2025-01-02 Python 开发Word转PDF工具实现
- 2025-01-02 程序员用Python实现自动化控制键盘和鼠标
- 2025-01-02 JSX和RN样式以及和web的不同之处
- 2025-01-02 原神增大视野范围方法 原神怎么增加可视范围
- 2025-01-02 137.Python——PySide6:QInputDialog输入对话框的创建与使用
- 2025-01-02 科目二倒车入库模拟机程序代码
- 2025-01-02 用 Python 和 Pygame 实现一个图形界面的俄罗斯方块小游戏
- 2025-01-02 软件测试|超好用超简单的Python GUI库——tkinter(二)
- 2025-01-02 红色警戒轻松搞定高分辨率全屏
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)