码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【QT5-解决不同分辨率屏幕-进行匹配大小-适应屏幕大小-基础样例】


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

    • 1、前言
    • 2、实验环境
    • 3-1、问题说明-屏幕视频
    • 3-2、解决方式-个人总结
    • 解决思路:我们在软件启动的时候,先获取屏幕大小,然后根据长宽,按照一定比例,重新设置大小。并且先把软件布局布好,内部控件也要规定好大小,让其不会因为屏幕分辨率不同,而乱显示。
        • (1)基础布局
        • (2)参考文章-QScreen类
        • (3)大佬指点
    • 4、本次实验
        • 1、新建工程
        • 2-1、控件布局
        • 2-2、控件限定大小
        • 2-3、启动时,扫描一下屏幕大小
        • 3、验证
    • 5、实验代码-链接
    • 6、细节部分
      • (1)多屏幕问题
      • (2)旧的类问题
    • 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

    主要代码段如下:

    ....
        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、总结

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

  • 相关阅读:
    Ubuntu20.04安装0pen3d及ISPC失败解决方案
    MySQL定时整库备份&滚动删除指定日期前的备份数据
    京东面试:MQ 消息丢失、重复、积压问题,如何解决?
    【Autopsy数字取证篇】Autopsy案例创建与镜像分析详细教程
    企业防护墙管理,有什么防火墙管理工具?
    bp神经网络怎么看结果,bp神经网络结果不一样
    文件之间的拷贝(拷贝图片实例)java.io.FileNotFoundException: G:\dad (拒绝访问。)通过绝对路径获取各种文件名
    盘点具备盈利潜力的几大加密板块,以及潜在的投资机会
    一文详解 requests 库中 json 参数和 data 参数的用法
    机器学习建模高级用法!构建企业级AI建模流水线 ⛵
  • 原文地址:https://blog.csdn.net/qq_22146161/article/details/132970509
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号