Qt应用程序文字显示不全

       用Qt写了一个模拟购票系统,在自己电脑(Windows10,分辨率:1366*768)上运行界面正常。当在别人电脑(windows7、windows10,分辨率都为:1920*1080)上运行时就出现了一些文字被遮挡覆盖的现象。查阅了大量资料,发现没有具体讲述是什么原因的(可能查阅资料能力有限),于是自己分析了几天,终于有了结果,在这里给大家分享一下。

 

一、测试过程:我又找了分辨率1440*900的电脑运行也没有问题,把自己电脑的分辨率从800*600到1366*768挨个调了一遍也没有问题,至此,感觉是高分辨率有问题。于是在网上找到说Qt5.6以后支持高分辨率只需在代码中添加一句(在QApplication创建之前添加 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);),添加之后问题依然没有解决。下面用图说明具体问题:

(1)界面全部采用Qt Designer画的,就没什么代码可说的,下面是我的界面布局。界面说明:左侧显示数据部分为可拉伸,右边车票查询和车票退订以及所有车票都采用固定大小,这样在自己电脑上任意缩放都不会掩盖文字;

(2)下图为自己电脑以及其余我所测试的过的分辨率中1920*1080以下的界面,文字都显示正常,且和右边的编辑框有一定间距;

(3)下图为在分辨率1920*1080上测试的结果,出现了QLabel标签的文本被遮盖的问题(出发地和目的地的“地”显示不全),另“车票查询”和“车票退订”也出现文字下边显示不全的情况;

至此,以为1080是个分界点,是高分辨率的问题。虽然结果是高分辨率引起的,但是问题的答案与高分辨没有直接关系,下面来解决这个问题吧!

二、解决问题:解决这个问题很简单,因为QLabel的字体大小默认为磅,只需改为用像素作为单位然后固定大小就可以了。

(1)改为像素的方法:当然不能直接在Qt Designer的控件属性里改,我改字体大小的改法为设置样式表 QLabel { font-size:12px; },(该界面的QLabel标签使用的为9磅,大约为12像素)。

三、问题的原因:找到了解决办法,那到底是什么原因引起的呢?

(1)因为高分辨率的显示器的文字显示很小,设置了显示放大(即更改了DPI,DPI是指每英寸的像素),该设置在(以windows10为例)桌面-->鼠标右键-->显示设置-->显示-->更改文本、应用和其他项目的大小。当为100%时,显示正常,当为100%以上时,如果字体大小为磅则显示会放大(设置为像素则不会放大)。

(2)为什么文字会被放大,其余控件不会呢?因为该设置为设置DPI,当DPI增大时,每英寸的像素也增多了,

例如:假设DPI = 100%时,1英寸为100像素,一个9磅的字体 = 9/72英寸 = 9/72 * 100 = 12.5像素;

那么当DPI = 125%时,1英寸为125像素,一个9磅的字体 = 9/72英寸 = 9/72 * 125 = 15.625像素;  1 pt(磅) = 1/72 in(英寸)

此时1个字体已经比原来多占了几个像素了,而设置的QLabel标签的固定大小为像素,像素没有变化,文字比原来多了几个像素,当然会出现字体溢出边框的现象了,所以要设置固定大小,则最好设置控件字体大小为像素(px)值。

 

 

 

 

### 回答1: Qt应用程序的分辨率自适应需要在程序开发时进行考虑和设置,以满足不同屏幕分辨率的需求。具体实现方法有以下几点: 1.设置窗口的最小和最大尺寸:通过设置窗口的最小和最大尺寸,可以确保窗口在不同分辨率下的自适应。可以通过QT的API函数resize()进行设置。 2.使用布局管理器:使用QT的布局管理器可以自动将控件放置到窗口上,并自动适配不同的分辨率。通过设置布局管理器的放置方式,可以实现控件的自适应。 3.图片自适应:在高分辨率的屏幕下,图像可能太小,而在低分辨率的屏幕上,图像太大。可以通过使用QPixmap::scaled()对图像进行控制,以适应不同的分辨率。 4.字体自适应:在不同分辨率下,字体大小会有所不同。可以通过使用QT的自动字体缩放功能来调整字体大小。 总之,Qt应用程序分辨率自适应需要开发者进行细致的设置和调整,才能满足不同屏幕分辨率的需求,让用户体验更加友好。 ### 回答2: Qt 应用程序的分辨率自适应是指 Qt 能够在不同分辨率的屏幕上自动调整窗口和控件的大小和位置,以确保最佳的用户体验和可视性。Qt 提供了一些有用的工具和技术,使开发者可以轻松实现应用程序的分辨率自适应。 Qt 的分辨率自适应功能主要依赖于以下 3 个方面: 1. 使用布局管理器:Qt 提供了多种布局管理器,如 QVBoxLayout、QHBoxLayout、QGridLayout 等。布局管理器可以根据窗口的大小和控件的属性,自动调整控件的大小和位置,以适应不同分辨率的屏幕。 2. 使用缩放:Qt 提供了 QTransform 类,可以通过调用 scale() 方法来缩放窗口和控件的大小。开发者可以根据不同分辨率的屏幕手动生成适应的缩放因子,从而实现分辨率自适应。 3. 使用高分辨率图像:Qt 支持使用高分辨率的图像文件,以适应各种分辨率的屏幕。例如,在高分辨率的屏幕上,可以使用 @2x 标识符来指定使用高分辨率的图像文件。 综上所述,Qt 的分辨率自适应功能可以通过布局管理器、缩放和高分辨率图像等多种方法实现。开发者可以根据实际需要选择合适的方法,以确保应用程序能够在不同分辨率的屏幕上有最佳的显示效果。 ### 回答3: Qt应用程序可以通过使用Qt的布局和大小策略来自适应各种分辨率。布局管理器是Qt中的一个基本组成部分,可帮助确保应用程序在各种屏幕大小和分辨率下具有一致的外观和感觉。 Qt提供了多种布局管理器,例如水平布局、垂直布局、网格布局等,可以在应用程序中组合使用。在使用布局管理器时,界面元素(如按钮和标签)会根据其原始大小和位置进行调整,以适应屏幕大小和分辨率。 此外,Qt还提供了支持高分辨率屏幕的功能。当应用程序高分辨率显示器上运行时,Qt会根据显示器的物理像素密度对界面进行缩放,以确保界面元素的大小和比例保持一致。 总之,Qt的布局管理器和分辨率自适应功能使得开发者能够更轻松地创建符合各种设备、各种分辨率和各种屏幕尺寸的应用程序
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值