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

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

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

相关文章

VMware17 不可恢复错误mks解决方案

用的虚拟机VMware17版本&#xff0c;然后运行带HDR的unity程序&#xff0c;结果报错 网上找了很多解决方案&#xff0c;都没用。毕竟需要在不放弃虚拟机3D加速的情况下运行。 最终皇天不负有心人&#xff0c;亲测有效的方法&#xff1a; 在虚拟机名字.vmx文件里添加以下2行&a…

URL 管理器

基本介绍 对外接口 对外提供两个接口&#xff1a;一个可以提取URL&#xff0c;一个可以增加URL&#xff0c;分别对应图上的1和2。 当要爬取某个网页时&#xff0c;则可以从1接口提取出该网页的URL进行爬取。 有时候爬取的网页内容中会包含别的网页链接&#xff0c;即包含有U…

网工内推 | 国企、上市公司,IA/IP认证即可,有年终、绩效

01 上海市机械设备成套&#xff08;集团&#xff09;有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、 负责公司电脑、网络设备、电器设备、办公设备等硬件的管理、维护和使用&#xff0c;做好计算机硬件及办公设备台帐&#xff1b; 2、 负责公司办公软件的…

回溯算法 解题思路

文章目录 算法介绍回溯算法能解决的问题解题模板1. 组合问题2. N皇后问题 算法介绍 回溯法&#xff08;Back Tracking Method&#xff09;&#xff08;探索与回溯法&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条件向前搜索&#xff0c;以达到目标…

zookeeper —— 分布式服务协调框架

zookeeper —— 分布式服务协调框架 一、Zookeeper概述1、Zookeeper的基本概念2、Zookeeper的特点3、Zookeeper的数据结构 二、Zookeeper的安装部署1、Zookeeper的下载2、Zookeeper的安装本地模式&#xff08;单机模式standalone&#xff09;安装部署分布式&#xff08;集群模式…

1978-2021年全国各省城镇与农村恩格尔系数数据

1978-2021年全国各省城镇与农村恩格尔系数数据 1、时间&#xff1a;1978-2021年 2、指标&#xff1a;城镇恩格尔系数、农村恩格尔系数 3、范围&#xff1a;31省市 4、来源&#xff1a;各省年鉴 5、用途&#xff1a;反应居民生活质量 6、指标解释&#xff1a; 恩格尔系数…

【SpringSecurity】三更草堂项目案例分析3 - 鉴权操作

目录 鉴权RBAC 模型前置准备redis 实现角色权限获取 鉴权 RBAC 模型 参考 CSDN 文章 RBAC&#xff08;Role-Based Access Control&#xff09;&#xff0c;基于角色的访问控制&#xff0c;现在主流的权限管理系统的权限设计都是 RBAC 模型 所谓的 RBAC 模型&#xff0c;可以理…

Java精品项目源码第61期垃圾分类科普平台(代号V061)

Java精品项目源码第61期垃圾分类科普平台(代号V061) 大家好&#xff0c;小辰今天给大家介绍一个垃圾分类科普平台&#xff0c;演示视频公众号&#xff08;小辰哥的Java&#xff09;对号查询观看即可 文章目录 Java精品项目源码第61期垃圾分类科普平台(代号V061)难度指数&…

【TCP】滑动窗口、流量控制 以及拥塞控制

滑动窗口、流量控制 以及拥塞控制 1. 滑动窗口&#xff08;效率机制&#xff09;2. 流量控制&#xff08;安全机制&#xff09;3. 拥塞控制&#xff08;安全机制&#xff09; 1. 滑动窗口&#xff08;效率机制&#xff09; TCP 使用 确认应答 策略&#xff0c;对每一个发送的数…

MySQL的常用术语

目录 1.关系 2.元组 3.属性 MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 1.关系 前面的博客有说到,MySQL是一款关系型数据库管理软件,一个关系就是 一张二维表(表) 我想大家都知道表格怎么…

【100天精通Python】Day61:Python 数据分析_Pandas可视化功能:绘制饼图,箱线图,散点图,散点图矩阵,热力图,面积图等(示例+代码)

目录 1 Pandas 可视化功能 2 Pandas绘图实例 2.1 绘制线图 2.2 绘制柱状图 2.3 绘制随机散点图 2.4 绘制饼图 2.5 绘制箱线图A 2.6 绘制箱线图B 2.7 绘制散点图矩阵 2.8 绘制面积图 2.9 绘制热力图 2.10 绘制核密度估计图 1 Pandas 可视化功能 pandas是一个强大的数…

Autojs 小游戏实践-神农百草园

概述 最近一直再写刷视频软件脚本&#xff0c;比如手机视频软件太多&#xff0c;每天都需要手动提现羊毛&#xff0c;太累&#xff0c;使用Autojs来帮助我提现&#xff0c;签到&#xff0c;扯远了&#xff0c;因为做刷视频脚本感觉有点无聊&#xff0c;所以试着做小游戏找图脚…

Openresty(二十二)ngx.balance和balance_by_lua终结篇

一 灰度发布铺垫 ① init_by_lua* init_by_lua init_by_lua_block 特点: 在openresty start、reload、restart时执行,属于master init 阶段机制&#xff1a; nginx master 主进程加载配置文件时&#xff0c;运行全局Lua VM级别上的参数指定的Lua代码场景&#xff1a; …

每日一题~二叉搜索树中的众数

题目链接&#xff1a;501. 二叉搜索树中的众数 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 思路分析&#xff1a; 由题可知&#xff0c;题目中所给的树是一颗二叉搜索树&#xff0c;二叉搜索树的中序遍历结果是一个从小到大的数据集&#xff0c;那么我们可…

「聊设计模式」之抽象工厂模式(Abstract Factory)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 在软件开发中&#xff0c;设计模式是一种被广泛使用的经验…

C++(day4)

思维导图 封装Mystring #include <iostream> #include<cstring>using namespace std;class Mystring{ public://无参构造函数Mystring():size(10){strnew char[size];strcpy(str,"");cout<<"无参构造函数"<<endl;}//有参构造函数…

平衡二叉树删除结点后的调整操作

1.回顾插入操作 插入新结点后&#xff0c;要保持二叉排序树的特性不变&#xff08;左<中<右)若插入新结点导致不平衡&#xff0c;则需要调整平衡。 2.删除操作 删除结点后&#xff0c;要保持二叉排序树的特性不变&#xff08;左<中<右)若删除结点导致不平衡&…

C++---链表

1、链表 1.1、链表的结构 每个链表开头都有一个头指针Head尾节点的指针域为NULL&#xff0c;用于判断此列表是否结束 如果一个链表开始就为NULL&#xff0c;那么该链表为空链表 链表中的先后不代表在真实内存中的位置&#xff0c;只是单纯的逻辑上关系 1.2、创建链表 我们首…

网络编程 day1

1->x.mind网络编程基础 2->简述字节序的概念&#xff0c;并用共用体&#xff08;联合体&#xff09;的方式计算本机的字节序 1.字节序是指不同类型的CPU主机&#xff0c;内存存储多字节整数序列的方式 2.小端字节序&#xff1a;低序字节存储在低地址上 3.大端字节序&a…

定制化图标——Element UI 组件图标替换指南

本篇博客将介绍如何在使用 Element UI 组件时对原生图标进行定制化替换&#xff0c;提供了适用于满足个性化需求的方法和技巧。 引言 Element UI 是一款基于 Vue.js 的流行 UI 组件库&#xff0c;在前端开发中得到广泛应用。然而&#xff0c;在使用 Element UI 的组件时&#…