【QT5-解决不同分辨率屏幕-进行匹配大小-适应屏幕大小】
- 1、前言
- 2、实验环境
- 3-1、问题说明-屏幕视频
- 3-2、解决方式-个人总结
- 解决思路:我们在软件启动的时候,先获取屏幕大小,然后根据长宽,按照一定比例,重新设置大小。并且先把软件布局布好,内部控件也要规定好大小,让其不会因为屏幕分辨率不同,而乱显示。
-
-
- [(1)基础布局](#(1)基础布局)
- [(2)参考文章-QScreen类](#(2)参考文章-QScreen类)
- [(3)大佬指点](#(3)大佬指点)
-
- 4、本次实验
- 5、实验代码-链接
- 6、细节部分
- 7、总结
1、前言
作为qt的初学者,开始入门qt的时候,很多东西其实也不是很会,调试好的软件如何发给别人使用,如何去做,也不是很清楚的,自己也查了很多资料才渐渐明白。
开始学习的时候,不同分辨率屏幕适配性的问题,一直没有较好的解决,记得当时找过一些方式,没能成功,如今再次查找,并且在大佬指点下,可以一定程度上适配了,或者说至少不会出现分配率很高,DIY软件很小,或者很大问题了。
另外软件看不看这些事情,多少有些主观上意思,说白了,人的喜好不同,布局出来的也不一样,有点就是喜好大一点图标,所以上我说一定程度上适配,要是完全解决,几乎不可能。
2、实验环境
实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样。
系统环境:window环境
QT软件版本:qt 5.14.2
3-1、问题说明-屏幕视频
写相应文章,都是为了解决相应问题的,本次就是为了解决相关屏幕适配大小问题。
之前一直无法成功,其实当时对qt等都不是特别了解,只是知道,可以重新设置软件外框大小,不知道如何根据屏幕设置外壳,再加上不会布局,内部控件也不会随着外围框大小改变。
之后会布局后,会加入图片等,但是发现一改变屏幕分辨率,控件和整体就会不适应,所以困扰了许久。
如下图所示,我屏幕是4k屏幕,但是软件自动只是占据了一部分,并不是自己想要,自己虽然不希望铺满全屏,但是至少大一些,显示多一点。
3-2、解决方式-个人总结
**
解决思路:我们在软件启动的时候,先获取屏幕大小,然后根据长宽,按照一定比例,重新设置大小。并且先把软件布局布好,内部控件也要规定好大小,让其不会因为屏幕分辨率不同,而乱显示。
**
(1)基础布局
首先,要进行布局,布局不只是调整各个控件比例等,还是个人审美,真正好的布局(ui设计)是需要花不少时间,本博客只是为说明问题,简单弄了一下。
参考文章:【QT 整体窗口拖动大小,内部控件无法跟随改变的原因>>>>>解决:布局相关,布局设置】
(2)参考文章-QScreen类
这里参考以下文章,知道了有QScreen这个类,是专门获取屏幕相关信息。
参考博文:https://blog.csdn.net/WL0616/article/details/129182751
主要代码段如下:
cpp
....
QRect rect1 = screen->geometry();
qDebug() << "rect1" << rect1.size().width() << rect1.size().height();
qDebug() << rect1.topLeft();
qDebug() << rect1.bottomRight();
QRect rect2 = screen->availableGeometry();
qDebug() << "rect2" << rect2.size().width() << rect2.size().height();
qDebug() << rect2.topLeft();
qDebug() << rect2.bottomRight();
int screen_width= rect2.size().width()*0.75; //设置可显示部分比例
int screen_height= rect2.size().height()*0.75; //设置可显示部分比例
...
查看一下官方文档,有更详细介绍,大概意思就是说,会扫描物理屏幕可以使用的面积,然后win11上或许有些不同,更详细请自行去文档中查看吧。
文档链接:https://doc.qt.io/qt-5/qscreen.html#details
(3)大佬指点
另外就是一个大佬指点,所谓假传万卷书,真传一句话,简单总结就是,为每个控件规定大小,这在改变是,所占有像素就不会有太大变化,就不会出现适配性问题,更严苛一点,你可以设定固定一个值,包括内部字体和图标,图标主要是选择合适大小的。
4、本次实验
1、新建工程
往昔文章说的听多了,可以参考其他位置,作为初学者,请看以下文章吧,就不过多赘述了。
参考文章:【QT 整体窗口拖动大小,内部控件无法跟随改变的原因>>>>>解决:布局相关,布局设置】
2-1、控件布局
本次为了说明问题,简单拉了几个控件,进行设置布局,需要看细节的,直接去"代码链接"部分,看代码吧。
2-2、控件限定大小
设置一些大小,包括但不限于,字体,使用图标,外框等,说起来挺简单,但是实际微调还是需要反复实验的,并且有时候,你调试界面和最终软件运行还不一样,进行反复实验,才能得到自己满意的界面。
2-3、启动时,扫描一下屏幕大小
如下为main.cpp文件内容,再次文件内写入相关代码。
cpp
#include "mainwindow.h"
#include <QDesktopWidget>
#include <QDebug>
#include <QScreen>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
QDesktopWidget* pDesktopWidget = QApplication::desktop();
//获取可用桌面大小
QRect deskRect = QApplication::desktop()->availableGeometry();
qDebug()<<"deskRect:"<<deskRect.x()<<" "<<deskRect.y()<<endl;
//获取主屏幕分辨率
QRect screenRect = QApplication::desktop()->screenGeometry();
qDebug()<<"screenRect:"<<screenRect.x()<<" "<<screenRect.y()<<endl;
//获取屏幕数量
int nScreenCount = QApplication::desktop()->screenCount();
qDebug()<<"nScreenCount:"<<nScreenCount<<endl;
QScreen* screen = QGuiApplication::primaryScreen();
//获取当前实际屏幕大小
QRect rect1 = screen->geometry();
qDebug() << "rect1" << rect1.size().width() << rect1.size().height();
qDebug() << rect1.topLeft();
qDebug() << rect1.bottomRight();
//获取当前实际可用屏幕大小(去掉下边框)
QRect rect2 = screen->availableGeometry();
qDebug() << "rect2" << rect2.size().width() << rect2.size().height();
qDebug() << rect2.topLeft();
qDebug() << rect2.bottomRight();
int screen_width= rect2.size().width()*0.75; //设置可显示部分比例
int screen_height= rect2.size().height()*0.75; //设置可显示部分比例
w.resize(screen_width,screen_height);
w.show();
return a.exec();
}
3、验证
如下图所示,可以按照自己的比例,写设置大小,并且告诉你当前屏幕大小,和可以使用的大小。
5、实验代码-链接
代码链接:
https://download.csdn.net/download/qq_22146161/88352951
6、细节部分
(1)多屏幕问题
循环扫描+重设屏幕大小。
实际每个人的喜好不同,有人喜好用两个屏幕,或者更多屏幕的,软件在切换的时候,或者被鼠标拖着去另一个屏幕时候,这样情况,本文暂时不讨论,只是提供一个思路,一种方式,是检测的方式,通过检测屏幕大小,而更改软件大小。
(2)旧的类问题
博文中也提到了,有个类已经不用,软件会自动提示使用新的类。
7、总结
另外想说的是,我的文章,一般比较少的会讲某个原理性的东西,一般来说一搜,网上会有很多说的,但是一般网上很少有存在,具体解决方式的,大多数情况,其实我们都是明白一些道理的,只是不知道如何去实现,不知道如何去走那个路径,我尽量趟出一条路,告诉你如此做是可以的,这样是可以解决实际问题的。