最近邻居老张跟我吐槽,说他开发的医疗设备管理软件在工程师的Surface上显示挺漂亮,到了车间工控机上就变得七零八落。这事让我想起去年用Qt做跨平台项目时,花了两周时间才解决不同屏幕的风格适配问题。今天咱们就聊聊这个话题,保证全是干货不掺水。
一、先搞清楚问题出在哪儿
就像装修房子要量尺寸,咱们得先摸清楚不同设备的差异点。上周刚帮某银行做的ATM终端项目里,测试组的设备清单看得我眼晕:
- 15.6寸触控屏(1920×1080)
- 10寸工业平板(1280×800)
- 7寸移动终端(800×480)
设备类型 | 常见分辨率 | DPI范围 |
桌面电脑 | ≥1920×1080 | 96-144 |
工业平板 | 1280×800 | 72-120 |
移动设备 | ≤1280×720 | 160-400+ |
1.1 DPI适配是基本功
去年给某连锁超市做收银系统时,发现他们的触摸屏DPI居然高达240。这时候要是用死像素值,按钮能小得像芝麻粒。记得在.pro文件里加上这行:
DEFINES += QT_SCALE_FACTOR_ROUNDING_POLICY=PassThrough
二、样式适配三大招
就像给房子刷漆,咱们得准备不同的涂料配方。上周刚用这个方法解决了医疗设备的夜间模式适配问题。
2.1 样式表要像水一样流动
千万别学我同事老王,把颜色值硬编码写在qss里。看看这段改进后的代码:
QWidget {
background: qlineargradient(
x1:0, y1:0, x2:0, y2:1,
stop:0 @primaryColor,
stop:1 @secondaryColor
);
border-radius: @baseRadius;
}
2.2 布局管理器得玩出花
- 用QGridLayout处理复杂表单
- 在移动端多用QStackedLayout
- 记得设置sizeConstraint属性
2.3 字体图标双保险
上个月给某车企做的车间管理系统,就栽在图标适配上了。后来改用这套方案:
方案 | 优点 | 适用场景 |
SVG矢量图 | 缩放无损 | 复杂图标 |
字体图标 | 加载快 | 简单图形 |
三、实战中的坑与对策
记得去年那个跨平台项目,在4K屏上跑得好好的,转到老设备上直接崩了。后来发现是用了QOpenGLWidget导致的,换成QWidget渲染才解决。
3.1 分辨率动态适配
void MainWindow::adjustScaling {
const float baseDPI = 96.0;
float currentDPI = logToDpi;
m_scaleFactor = currentDPI / baseDPI;
qApp->setProperty("scaleFactor", m_scaleFactor);
}
3.2 多屏适配要小心
上周测试时发现,当外接显示器DPI不窗口会突然抽搐。后来参考《Qt多显示器适配手册》加了这段:
QObject::connect(qApp, &QGuiApplication::screenAdded, [](QScreen screen){
updateDpi(screen->logicalDpi);
});
四、测试要像找茬游戏
现在我们的测试流程是这样的:
- 准备5种分辨率模拟器
- 用Qt Test Framework自动截图比对
- 重点检查边距和字体渲染
最后说个趣事,前阵子帮客户调试时,发现他们的工控机居然用着Windows XP系统。幸亏Qt5.15还能兼容,要不就得重写整个UI层了。所以说做跨平台开发啊,永远要做好面对各种奇葩设备的准备。
评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
网友留言(0)