win高分屏下Qt程序的界面适配处理
来源:互联网 发布:网络教育毕业档案 编辑:程序博客网 时间:2024/06/05 09:44
在高分屏的设备内,如果程序没有进行适配,那么界面就会太小而看不清楚,而且系统显示比例的缩放对程序也不生效。下面是Qt程序界面显示适配系统缩放的一种解决方法。
首先,获取windows系统的像素密度,也就是DPI
// Get desktop dcdesktopDc = GetDC(NULL);// Get native resolutionhorizontalDPI = GetDeviceCaps(desktopDc, LOGPIXELSX);verticalDPI = GetDeviceCaps(desktopDc, LOGPIXELSY);
horizontalDPI的返回值应该和verticalDPI的返回值是相同的。如果系统没有设置缩放,则返回96,对应的是100%,其他对应值如下:
96 100%
120 125%
144 150%
192 200%
以上比例是系统默认提供的,如果是自定义比例,用获取到的返回值除以96即可得到对应的显示比例。
PS.此DPI因子也可以在系统的注册表内读取到,路径如下:计算机\HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics,项为AppliedDPI。不过由于权限的原因,通常不采用读取注册表的方法。
其次,定义比例获取函数,返回缩放因子
const float DEFAULT_DPI = 96.0;float winDpiScale(){ HDC screen = GetDC(NULL); FLOAT dpiX = static_cast<FLOAT>( GetDeviceCaps( screen, LOGPIXELSX ) ); ReleaseDC( 0, screen ); return dpiX / DEFAULT_DPI;}
测试程序具体应用如下:
1.简易界面设计
代码片段如下:
const static int fixedWidth = 320;const static int fixedHeight = 480;const static int fontSize = 12;const static int btnW = 120;const static int btnH = 20;void Dialog::slot_chkNewDpiSet(){ float scale = winDpiScale(); if(ui->chk_setDPI->isChecked()) { ui->chk_setDPI->setText(tr("当前界面缩放为") + QString::number(scale * 100));int newWidth = fixedWidth * scale;int newHeight = fixedHeight * scale; this->setFixedSize(newWidth, newHeight);QString qss = tr("QWidget { font-size: %0px; } #btnWbTest{ width: %1px; height: %2px; }").arg(fontSize*scale).arg(btnW*scale).arg(btnH*scale);this->setStyleSheet(qss); } else { ui->chk_setDPI->setText(tr("适应系统缩放")); this->setFixedSize(fixedWidth, fixedHeight);QString qss = tr("QWidget { font-size: %0px; } #btnWbTest{ width: %1px; height: %2px; }").arg(fontSize).arg(btnW).arg(btnH);this->setStyleSheet(qss); }}适配后效果如下:
其他界面资源的设置同理,选择适当大小的资源,然后设置宽高时乘以缩放因子就好。
阅读全文
0 0
- win高分屏下Qt程序的界面适配处理
- QT-支持高分屏
- QT win 下的安装
- Qt程序在win下简单打包发布
- 高分屏win10软件界面字太小解决方法
- eclipse在高分屏下的DPI调整方案
- Eclipse在高分屏下图标过小的解决方法
- electronic-wechat高分屏下的缩放修改
- Eclipse在高分屏下图标过小的解决方法
- WIN下查看端口占用的程序
- WIN下查看端口占用的程序
- Qt程序设置界面显示在屏幕中央(包括多屏机的处理)
- qt 之win程序图标
- QT GUI界面假死的处理
- QT GUI界面假死的处理
- QT程序启动界面的使用
- QT程序启动界面的使用
- Qt-提升界面程序的可读性
- Ice系列--IceBox(2)
- 暴风魔镜VR_凝视
- Linux与Windows哪个更适合你?
- 简单java类和数据表的映射
- hdu 2873 Bomb Game
- win高分屏下Qt程序的界面适配处理
- Dubbo服务启动时Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to bind NettyServer on /19
- Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取
- 【个人笔记】Ubuntu使用|openssl,ssh等出现了很多的问题
- Java 并发工具包 java.util.concurrent 用户指南
- iOS设备屏幕分辨率分布
- sql查询树形结构的数据 n+1问题
- 操作系统中进程、线程的知识点和简答题
- Android 接收系统广播,开机启动Service,SMS,Battery