一种基于qss样式表的高分屏及各种缩放比的自动适配方法组成比例

技术编号:35780695 阅读:13 留言:0更新日期:2022-12-01 14:26
本申请涉及一种基于qss样式表的高分屏及各缩放比的自动适配方法,该方法包括获取屏幕的缩放比,根据缩放比得到更新后的样式表并按更新后的样式表进行显示。上述高分屏适配方案,由于直接对样式表进行修改后按更新后的样式表绘制,就高分屏适配效果而言,优于Windows操作系统和Qt框架托管实现的适配效果。操作系统和Qt框架托管实现的适配效果。操作系统和Qt框架托管实现的适配效果。

【技术实现步骤摘要】
一种基于qss样式表的高分屏及各种缩放比的自动适配方法


[0001]本申请涉及显示
,尤其涉及一种基于qss样式表的高分屏及各种缩放比的自动适配方法。

技术介绍

[0002]为了使桌面端的应用程序能够在各种分辨率及缩放比的屏幕下正常显示,需要应用程序对不同的缩放比进行适配。在应用程序分辨率或缩放比变化时,应用程序中的各个元素需要进行尺寸及位置的调整;在Windows系统中,如果程序本身没有做高分屏适配的处理,那么Windows会通过界面拉伸完成DPI适配,从而导致界面模糊。对于Qt框架,官方并没有提供一整套完整的有效解决方案,如果希望启用Qt的高分屏适配则需要设置Qt::AA_EnableHighDpiScaling和setHighDpiScaleFactorRoundingPolicy。但仍会有问题,如在不同分辨率下gif图片会出现锯齿、模糊,字体粗细不一、动画拖影等问题。针对这一问题,现有技术中也出现了一些解决方案以实现在Qt中适配高分屏。Qt适配高分屏的一种有效但不是最优的做法为:重载resizeEvent函数,实时获取屏幕的缩放比,然后使用Qt中自带的方法qputenv("QT_SCALE_FACTOR","缩放比”)根据缩放比动态调整程序窗口。但是这种方法,调整后的界面会出现边框线条重叠、断续等各种无法预期的显示问题。因此,现有技术中针对Qt框架下高分屏和各缩放比的自动适配,没有很好的解决方案。

技术实现思路

[0003]为了解决上述问题,本申请的目的在于提供一种基于qss样式表的高分屏及各缩放比的自动适配方法。
[0004]为了实现上述的目的,本申请采用了以下的技术方案:
[0005]一种基于qss样式表的高分屏及各缩放比的自动适配方法,
[0006]在监测到屏幕分辨率或缩放比改变时,获取屏幕的缩放比z;
[0007]获取当前Qt样式表qss_o的像素单位大小dpi_o;
[0008]根据所述屏幕的缩放比z计算各控件的目标像素单位大小dpi_n,dpi_n=dpi_o*z;
[0009]使用各控件的目标像素单位大小dpi_n替换当前Qt样式表qss_o中对应控件的像素单位大小dpi_o,得到更新后的Qt样式表qss_n;
[0010]在resizeEvent重载函数中调用setStyleSheet方法设置更新后的Qt样式表qss_n,使用更新后的样式表qss_n进行显示。
[0011]本申请采用上述技术方案,在按样式表进行绘制之前事先对样式表中各控件预设的像素单位大小按当前缩放比进行缩放,得到更新后的样式表,然后按更新后的样式表进行绘制,实现对高分屏和不同缩放比的自动适配。并且上述高分屏适配方案,由于直接对样式表进行修改后按更新后的样式表绘制,就高分屏适配效果而言,优于Windows操作系统和Qt框架托管实现的适配效果。且本申请的实现方案是基于Qt自身加载流程进行改进,实现
方式简单,只需要简单的代码即可使UI界面的样式表自适应各种分辨率和缩放比,大大减少了开发者手工编码的时间和精力成本。且无论是将样式表单独放到qss文件里还是在ui文件里设置,本方法都支持。
附图说明
[0012]图1为实施例方法的流程图。
具体实施方式
[0013]下面详细描述本申请的实施例。
[0014]本申请公开一种基于qss样式表的高分屏及各缩放比的自动适配方法,包括以下步骤:
[0015]在监测到屏幕分辨率或缩放比改变时,获取屏幕的缩放比z;
[0016]获取当前Qt样式表qss_o的像素单位大小dpi_o;
[0017]根据所述屏幕的缩放比z计算各控件的目标像素单位大小dpi_n,dpi_n=dpi_o*z;
[0018]使用各控件的目标像素单位大小dpi_n替换当前Qt样式表qss_o中对应控件的像素单位大小dpi_o,得到更新后的Qt样式表qss_n;
[0019]在resizeEvent重载函数中调用setStyleSheet方法设置更新后的Qt样式表qss_n,使用更新后的样式表qss_n进行显示。
[0020]上述方法中,在按样式表进行绘制之前事先对样式表中各控件预设的像素单位大小按当前缩放比进行缩放,得到更新后的样式表,然后按更新后的样式表进行绘制,实现对高分屏和不同缩放比的自动适配。并且上述高分屏适配方案,由于直接对样式表进行修改后按更新后的样式表绘制,就高分屏适配效果而言,优于Windows操作系统和Qt框架托管实现的适配效果。且本申请的实现方案是基于Qt自身加载流程进行改进,实现方式简单,只需要简单的代码即可使UI界面的样式表自适应各种分辨率和缩放比,大大减少了开发者手工编码的时间和精力成本。且无论是将样式表单独放到qss文件里还是在ui文件里设置,本方法都支持。
[0021]在Qt中,重载resizeEvent函数可以监控到显示器分辨率和缩放比是否发生变化。因此,上述方法包括步骤:
[0022]重载resizeEvent函数,监控屏幕分辨率或缩放比的改变。
[0023]resizeEvent是Qt中自带的方法,该事件能够监控屏幕分辨率或缩放比的改变。因此本实施例中直接使用resizeEvent函数确定屏幕分辨率或缩放比是否发生变化。
[0024]所述获取屏幕的缩放比z,包括:
[0025]获取默认的100%缩放比下的DPI和当前的DPI,z=当前的DPI/默认的100%缩放比下的DPI。
[0026]DPI的全称是dots per inch(DPI),也就是每英寸的点数,在显示器上就是每英寸的像素个数。Window上一般默认是96dpi作为100%的缩放比率。Qt中自带的方法logicalDotsPerInch可以获取当前每英寸的点数即当前的DPI。此时,Qt中先调用logicalDotsPerInch获取每英寸的点数再除以96即可得到当前的缩放比,如100%、200%。
[0027]本实施例中,所述获取当前Qt样式表qss_o的像素单位大小dpi_o,包括:
[0028]遍历整个Qt样式表字符串,提取其中的数字作为dpi_o。
[0029]作为优选实施方式,所述提取其中的数字包括:借助正则表达式((\\d+)px)进行模式匹配,取出字符串中的数字。
[0030]由于在样式表中,通常以字符串带数字的形式表某些控件的样式,例如margin:2px,标识设置外边距为2像素。因此可以通过字符串匹配直接提取出其中的数字,这些数字即表示在默认分辨率下设置的对应样式的具体像素单位大小。上述方法基于样式表中控件的样式设置规则进行处理,能够简单高效的提取当前Qt样式表qss_o的像素单位大小dpi_o。
[0031]通过上述方法提取字符串中的数字后,将其乘以之前得到的缩放比得到dpi_n,然后用其替代原字符串中的数字即得到修改后的样式表。于实施例中,调用Qt自带的QString::rep本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于qss样式表的高分屏及各缩放比的自动适配方法,其特征在于,在监测到屏幕分辨率或缩放比改变时,获取屏幕的缩放比z;获取当前Qt样式表qss_o的像素单位大小dpi_o;根据所述屏幕的缩放比z计算各控件的目标像素单位大小dpi_n,dpi_n=dpi_o*z;使用各控件的目标像素单位大小dpi_n替换当前Qt样式表qss_o中对应控件的像素单位大小dpi_o,得到更新后的Qt样式表qss_n;在resizeEvent重载函数中调用setStyleSheet方法设置更新后的Qt样式表qss_n,使用更新后的样式表qss_n进行显示。2.根据权利要求1所述的方法,其特征在于,包括,在获取屏幕的缩放比之前,重...

【专利技术属性】
技术研发人员:王健毛李鹏
申请(专利权)人:浙江讯盟科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1