• 【QT5-解决不同分辨率屏幕-进行匹配大小-适应屏幕大小-基础样例】


    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

    主要代码段如下:

    ....
        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; //设置可显示部分比例
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    查看一下官方文档,有更详细介绍,大概意思就是说,会扫描物理屏幕可以使用的面积,然后win11上或许有些不同,更详细请自行去文档中查看吧。
    文档链接:https://doc.qt.io/qt-5/qscreen.html#details
    在这里插入图片描述

    (3)大佬指点

    另外就是一个大佬指点,所谓假传万卷书,真传一句话,简单总结就是,为每个控件规定大小,这在改变是,所占有像素就不会有太大变化,就不会出现适配性问题,更严苛一点,你可以设定固定一个值,包括内部字体和图标,图标主要是选择合适大小的。

    在这里插入图片描述

    4、本次实验

    1、新建工程

    往昔文章说的听多了,可以参考其他位置,作为初学者,请看以下文章吧,就不过多赘述了。

    参考文章:【QT 整体窗口拖动大小,内部控件无法跟随改变的原因>>>>>解决:布局相关,布局设置】
    在这里插入图片描述

    2-1、控件布局

    本次为了说明问题,简单拉了几个控件,进行设置布局,需要看细节的,直接去“代码链接”部分,看代码吧。

    在这里插入图片描述

    2-2、控件限定大小

    设置一些大小,包括但不限于,字体,使用图标,外框等,说起来挺简单,但是实际微调还是需要反复实验的,并且有时候,你调试界面和最终软件运行还不一样,进行反复实验,才能得到自己满意的界面。
    在这里插入图片描述

    2-3、启动时,扫描一下屏幕大小

    如下为main.cpp文件内容,再次文件内写入相关代码。

    #include "mainwindow.h"
    #include 
    #include 
    #include 
    #include 
    
    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();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    3、验证

    如下图所示,可以按照自己的比例,写设置大小,并且告诉你当前屏幕大小,和可以使用的大小。

    在这里插入图片描述

    5、实验代码-链接

    代码链接:
    https://download.csdn.net/download/qq_22146161/88352951

    6、细节部分

    (1)多屏幕问题

    循环扫描+重设屏幕大小。
    实际每个人的喜好不同,有人喜好用两个屏幕,或者更多屏幕的,软件在切换的时候,或者被鼠标拖着去另一个屏幕时候,这样情况,本文暂时不讨论,只是提供一个思路,一种方式,是检测的方式,通过检测屏幕大小,而更改软件大小。
    在这里插入图片描述

    (2)旧的类问题

    博文中也提到了,有个类已经不用,软件会自动提示使用新的类。
    在这里插入图片描述

    7、总结

    另外想说的是,我的文章,一般比较少的会讲某个原理性的东西,一般来说一搜,网上会有很多说的,但是一般网上很少有存在,具体解决方式的,大多数情况,其实我们都是明白一些道理的,只是不知道如何去实现,不知道如何去走那个路径,我尽量趟出一条路,告诉你如此做是可以的,这样是可以解决实际问题的。

  • 相关阅读:
    【libGDX】使用Mesh绘制三角形
    利用Qt制作美化登录界面框
    第9章 读写文件
    药物滥用第五篇介绍
    手写RPC框架-注册中心实现
    网络爬虫的意义:连接信息世界的纽带
    计算机网络作业(存储单位k、KB、MB、GB、TB、PB;手机运行内存和内存的区别)
    教你使用Prometheus-Operator进行K8s集群监控
    windows server 2012 R2的C盘空间满了,但是找不到大文件的两种原因
    c++ 函数的参数是否可以为auto
  • 原文地址:https://blog.csdn.net/qq_22146161/article/details/132970509