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

news2024/9/24 7:25:13

【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; //设置可显示部分比例
...

查看一下官方文档,有更详细介绍,大概意思就是说,会扫描物理屏幕可以使用的面积,然后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 <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、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1019742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用思维导图做备考计划

大学除了上课&#xff0c;还有很多事情需要我们去做&#xff0c;比如说期末考试、考证等。思维导图作为一种高效的思维工具&#xff0c;可以帮助我们整理和规划备考内容。今天我们就将探讨如何用思维导图做备考计划&#xff0c;并提供一些实用的建议。甘特图&#xff08;Gantt …

flutter开发实战-自定义长按TextField输入框剪切、复制、选择全部菜单AdaptiveTextSelectionToolba样式UI效果

flutter开发实战-自定义长按TextField输入框剪切、复制、选择全部菜单样式UI效果 在开发过程中&#xff0c;需要长按TextField输入框cut、copy设置为中文“复制、粘贴”&#xff0c;我首先查看了TextField中的源码&#xff0c;看到了ToolbarOptions、AdaptiveTextSelectionToo…

工作5年,没用过分布式锁,正常吗?

公司想招聘一个5年开发经验的后端程序员&#xff0c;看了很多简历&#xff0c;发现一个共性问题&#xff0c;普遍都没用过分布式锁&#xff0c;这正常吗&#xff1f; 下面是已经入职的一位小伙伴的个人技能包&#xff0c;乍一看&#xff0c;还行&#xff0c;也没用过分布式锁。…

基于Java的新能源充电系统的设计与实现(亮点:完整合理的充电流程,举报反馈机制、余额充值、在线支付、在线聊天)

新能源充电系统 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统实现5.1 完整充…

【Python】自动化办公之路:word自动化实战宝典!

文章目录 前言一、环境安装二、使用步骤1.引入库2.读入数据 Python-docx 编辑已存在文档win32com 将 doc 转为 docxwin32com 操作 word总结 前言 使用Python操作word大部分情况都是写操作&#xff0c;也有少许情况会用到读操作&#xff0c;在本次教程中都会进行讲解&#xff0…

GitHub无法访问的解决方法

每次刚装完系统我们访问GitHub就会出现无法访问的情况&#xff0c;此时只需要修改host文件将可访问的dns解析地址写入进去即可。 查询DNS 使用dns监测查询工具 https://tool.chinaz.com/dns https://dnsdaquan.com/ 输入无法访问的IP github.com 进行检测 查询到可访问的i…

HarmonyOS应用开发Web组件基本属性应用和事件

一、Web组件概述 Web组件用于在应用程序中显示Web页面内容&#xff0c;为开发者提供页面加载、页面交互、页面调试等能力。 页面加载&#xff1a;Web组件提供基础的前端页面加载的能力&#xff0c;包括加载网络页面、本地页面、Html格式文本数据。页面交互&#xff1a;Web组件提…

【C刷题训练营】第四讲(打好基础很重要)

前言: 大家好&#xff0c;这是c语言刷题训练营的第四讲&#xff0c;打好基础便于对c语言语法与算法思维的提高&#xff0c;感谢你的来访与支持&#xff01; &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨刷题专栏…

QT工具MaintenanceTool.exe如何管理组件(解决“要继续此操作,至少需要一个有效且已启用的储存库”问题)

试了好多个博客的链接&#xff0c;终于是试了一个&#xff1a; http://mirrors.ustc.edu.cn/qtproject/online/qtsdkrepository/windows_x86/root/qt/ 哪里放这个链接就不说了&#xff0c;可以自己去找其他博客&#xff0c;我用其他博客的链接不行&#xff0c;但这个链接试用。…

国庆假期将至,拓世AI智能规划行程,让您轻松游遍全球热门景点!

卡夫卡曾说&#xff1a;“人不是活几年、几月、几天、几小时&#xff0c;而只活几个瞬间。” 亲赴一场与美景的邂逅&#xff0c;便是去找寻人生里的瞬间之美。转眼已是九月&#xff0c;正是人间好时节&#xff0c;挥别工作和生活的烦闷&#xff0c;奔向辽阔的天地中。即将到来…

基于SSM+Vue的“魅力”繁峙宣传网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

基于图像形态学处理和边缘提取算法的路面裂痕检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 [Rr,Cc] size(Image1);% 获取 Image1 矩阵的大小&#xff08;行数和列数&#xff09; % 创…

ubuntu+.net6+docker 应用部署教程

先期工作 1、本地首先安装 Docker Desktop 2、本地装linux in windows 3、生成镜像 后期工作 1、云服务器部署 生成镜像方法 1、生成Dockerfile配置文件 开发工具visual studio 2022 如果项目已经存在&#xff0c;可以选中项目&#xff0c;右键点击->选择添加Docker…

3D Web轻量化引擎HOOPS:轻松解决OSGB模型复杂性与性能挑战!

在当今的数字时代&#xff0c;三维模型的创建和展示对于众多行业都至关重要。无论是用于游戏开发、虚拟现实体验、建筑设计还是工程仿真&#xff0c;高质量的3D模型都能够提供更真实的视觉效果和更精确的数据表示。 然而&#xff0c;随着模型的复杂性增加&#xff0c;其数据量…

【数据库系统概论】数据库的四个基本概念:数据、数据库、数据库管理系统和数据库系统

数据&#xff08;data&#xff09;数据库&#xff08;DataBase, DB&#xff09;数据库管理系统&#xff08;DataBase Management System, DBMS&#xff09;数据库系统&#xff08;DataBase System, DBS&#xff09;感谢 &#x1f496; 数据&#xff08;data&#xff09; 定义&…

CSS 实现祥云纹理背景

&#x1fab4; 背景 最近掘金出来一个中秋创意活动&#xff0c;我准备参加一下。作品方向选择用纯css做一个中秋贺卡&#xff0c;其中有一些中秋的元素和一些简单的动画&#xff0c;而贺卡背景的实现就是本文要讲的内容。 中秋贺卡成果图&#xff08;生成gif有点失真&#x1f6…

科技云报道:分布式存储红海中,看天翼云HBlock如何突围?

科技云报道原创。 过去十年&#xff0c;随着技术的颠覆性创新和新应用场景的大量涌现&#xff0c;企业IT架构出现了稳态和敏态的混合化趋势。 在持续产生海量数据的同时&#xff0c;这些新应用、新场景在基础设施层也普遍基于敏态的分布式架构构建&#xff0c;从而对存储技术…

GE D20 EME 10BASE-T电源模块产品特点

GE D20 EME 10BASE-T 电源模块通常是工业自动化和控制系统中的一个关键组件&#xff0c;用于为系统中的各种设备和模块提供电源。以下是可能包括在 GE D20 EME 10BASE-T 电源模块中的一些产品特点&#xff1a; 电源输出&#xff1a;D20 EME 模块通常提供一个或多个电源输出通道…

laravel框架 - 语言包的安装和配置

1, 查找 laravel框架语言包地址&#xff1a; \根目录\resources\lang\ 默认有个 en 语言包 2&#xff0c;下载 和 安装 下载地址&#xff1a;https://packagist.org/ 搜索 laravel/lang 参考网址&#xff1a;https://packagist.org/packages/overtrue/laravel-lang 选择你…

Python运维脚本:提高工作效率

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…