Qt下自适应分辨率

qt下自适应分辨率应该有两种方法:通过栅格布局;通过缩放比。
本人采用的是缩放比来适应不同的分辨率。首先定义一个类实现屏幕分辨率和长宽缩放比的获取,由于该类可能被多个ui界面使用,所以定义为一个单例模式。代码如下:
screenresolution.h

#ifndef SCREENRESOLUTION_H
#define SCREENRESOLUTION_H#include <QRect>
#include "log.hpp"
#include "DataStruct.h"typedef struct scaleRatio//自适应屏幕分辨率时的缩放比
{qreal width;//宽之比qreal height;//高之比
}stuScrResolution;#define BASE_W 1920//基本屏幕分辨率
#define BASE_H 1080class screenResolution
{
private:screenResolution();
public:static screenResolution* getInstance();QRect getScreenRadio();stuScrResolution getHVScaleRatio();
private:static screenResolution *m_screResolution;
};#endif // SCREENRESOLUTION_H

screenresolution.cpp

#include "screenresolution.h"
#include <QGuiApplication>
#include <QScreen>
#include <QMutex>screenResolution* screenResolution::m_screResolution = nullptr;
screenResolution::screenResolution()
{}screenResolution* screenResolution::getInstance()
{static QMutex m_cLock;if(m_screResolution == nullptr){m_cLock.lock();m_screResolution = new screenResolution();m_cLock.unlock();}return m_screResolution;
}QRect screenResolution::getScreenRadio()
{QScreen *screenPrimary=QGuiApplication::primaryScreen();QRect screen =screenPrimary->availableGeometry();return screen;
}stuScrResolution screenResolution::getHVScaleRatio()
{QRect screen = getScreenRadio();outPut<<"屏幕分辨率:"<<screen.width()<<screen.height();stuScrResolution tempResolution;tempResolution.width = (qreal)BASE_W / screen.width();tempResolution.height = (qreal)BASE_H / screen.height();
//    outPut<<"自适应的缩放比:宽="<<tempResolution.width<<"高="<<tempResolution.height;return tempResolution;
}

使用的时候通过定义指向改类的指针获取该类的对象,具体使用如下:

   QRect rectTemp = screenResolution::getInstance()->getScreenRadio();qreal percentW = screenResolution::getInstance()->getHVScaleRatio().width;qreal percentH = screenResolution::getInstance()->getHVScaleRatio().height;resize(140 / percentW,174 / percentH);ui->frame->setGeometry(0,0,140 / percentW,174 / percentH);ui->fullScreenBtn->setGeometry(0,1 / percentH,140 / percentW,58 / percentH);ui->collectBtn->setGeometry(0,59 / percentH,140 / percentW,58 / percentH);ui->upScreenBtn->setGeometry(0,116 / percentH,140 /percentW,58 / percentH);

获取该分辨率下对应的长宽比,然后缩放。这是对于常规的控件的自适应。对于一些动态创建的不规则的按钮,处理方式稍有不同。具体可参考如下:

 m_sceneBtnGroup = new QPushButton(ui->firstbtnWidget);m_sceneBtnGroup->setCheckable(true);
//         outPut<<"设置按钮位置前";m_sceneBtnGroup->setGeometry(i*108 / m_percentW,0,125 / m_percentW,30 / m_percentH);
//         outPut<<"设置按钮位置后";m_sceneBtnGroup->setText(QString("屏幕组%1").arg(i+1));if(i == 0){outPut<<"第一个按钮";pixmap.load(":/new/prefix1/淳中切图/未选中-切换.png");pixmap = pixmap.scaled(QSize(125 / m_percentW,30 / m_percentH),Qt::KeepAspectRatio);m_sceneBtnGroup->setFixedSize(pixmap.size());bit = pixmap.mask();m_sceneBtnGroup->setMask(bit);if(screenRect.width() > BASE_W && screenRect.height() > BASE_H){m_sceneBtnGroup->setStyleSheet("QPushButton{border-image: url(:/new/prefix1/淳中切图/未选中-切换.png);""border:none;font-size: 31px;font-family: Microsoft YaHei;""font-weight: 400;color: #FFFFFF;line-height: 18px;}""QPushButton:checked{border-image: url(:/new/prefix1/淳中切图/选中-切换.png);""font-size: 31px;font-family: Microsoft YaHei;""font-weight: 400;color: rgba(255, 255, 255, 0.8);line-height: 18px;}");}else{m_sceneBtnGroup->setStyleSheet("QPushButton{border-image: url(:/new/prefix1/淳中切图/未选中-切换.png);""border:none;font-size: 16px;font-family: Microsoft YaHei;""font-weight: 400;color: #FFFFFF;line-height: 18px;}""QPushButton:checked{border-image: url(:/new/prefix1/淳中切图/选中-切换.png);""font-size: 16px;font-family: Microsoft YaHei;""font-weight: 400;color: rgba(255, 255, 255, 0.8);line-height: 18px;}");}

不规则按钮采用的是setMask()进行实现,所以对于不规则按钮不光要实现位置自适应还有控件的大小的自适应,这种情况下就需要将图片进行缩放,以达到想要的效果。对于控件上的文字采用的是不同分辨率下指定了特定的文字大小。
对于ui文件需要在ui文件中设置控件的属性为最优,不能设置为固定值(即最大值和最小值相等),控件如果加载了背景图片且不想再使用特定分辨率下指定的切图,这时可以使用border-image将图片进行拉伸。
设置控件属性:
在这里插入图片描述

本文只记录了主要部分,以备后续使用。

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

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

相关文章

OpenGL ES EGL 简介

目录 一.EGL 简介二.EGL 跨平台之 ANGLE 1.ANGLE 支持跨平台2.ANGLE 支持渲染器3.ANGLE 下载地址 三.EGL 坐标系四.EGL 绘图步骤五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录…

第八篇:Spring Boot整合Thymeleaf_入门试炼04

继承parent父工程&#xff0c;新建一个子项目&#xff0c;名称为spring-boot-chapter-8 1、引入 thymeleaf 模板依赖 <!-- 引入 thymeleaf 模板依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star…

华为发布基于第二代英特尔®至强®可扩展处理器家族的新一代服务器

2019年4月4日&#xff0c;在主题为“智能&#xff0c;计算进化”的发布会上&#xff0c;华为正式发布了基于第二代英特尔 至强 可扩展处理器以及支持英特尔傲腾 ™ 数据中心级持久内存的新一代FusionServerPro智能服务器&#xff0c;包括2路、4路机架式服务器&#xff0c;高密X…

qt样式表中背景图片的使用

使用样式表的设置背景的时候需要注意&#xff1a; background-image:url(); 设置的背景图片不会缩放拉伸&#xff0c;图片多大就展示多大&#xff0c;若控件比图片大&#xff0c;再没有设置图片填充方式的情况下则会出现重复添加图片&#xff0c;即用多个同样的图片来填充控件。…

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä'

java.sql.SQLException: The server time zone value ‘’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you w…

qt使用样式表来设置不规则按钮

参考代码如下&#xff1a; pixmap.load(":/new/prefix1/淳中切图/未选中-3.png");pixmap pixmap.scaled(QSize(125 / m_percentW,30 / m_percentH),Qt::KeepAspectRatio);m_sceneBtnGroup->setFixedSize(pixmap.size());bit pixmap.mask();m_sceneBtnGroup->…

第九篇:Spring Boot整合Spring Data JPA_入门试炼01

Spring Data JPA:介绍&#xff1a; Spring Data就是spring提供操作数据库的框架&#xff0c;而Spring Data JPA只是Spring Data框架下的一个基于JPA标准操作数据库的模块。 Spring Data JPA&#xff1a;基于JPA的标准对数据进行操作。简化持久层的代码&#xff0c;只需要写接口…

华为智能计算发布FusionServer Pro智能服务器

【中国&#xff0c;北京&#xff0c;2019年4月3日】华为智能计算业务部在北京召开了主题为“智能&#xff0c;计算进化”的发布会&#xff0c;正式发布FusionServer Pro智能服务器。将从“智能加速、智能管理、智能数据中心”三个层次助力数据中心智能化升级。 世界正从数字化…

qt场景中视图QGraphicsView的缩放

继承QGraphicsView自定义视图,重写wheelevent&#xff08;)事件&#xff0c;在滚轮事件中实现视图的放大和缩小。 放大缩小的主要代码&#xff1a; void GraphicsView::wheelEvent(QWheelEvent *e) {if(!m_isScroll){return ;}if (e->modifiers() & Qt::ControlModifie…

第九篇:Spring Boot整合Spring Data JPA_入门试炼02

Spring Data JPA 提供的核心接口 1、Repository接口 2、CrudRepository接口 3、PagingAndSortingRepository接口 4、JpaRepository接口 5、JpaSpecificationExecutor接口 Repository接口使用 1、提供了方法名称命名方式 持久层接口编写&#xff1a; /*** Repository接口的方法…

分布式精华问答:分布式环境下如何保持数据一致性的?| 技术头条

分布式开发的时代实际上早已悄悄地成为了时代的主流&#xff0c;今天&#xff0c;我们就来看看关于分布式的精华问答吧&#xff01;1Q&#xff1a;分布式系统中主要是用到了服务化&#xff0c;消息中间件&#xff0c;数据库拆分&#xff0c;便于横向扩展和维护&#xff0c;但分…

Qt中视图的缩放对应缩略图中矩形框的缩放

本文实现的目的是&#xff1a;视图缩放时&#xff0c;缩略图中的矩形框也进行缩放&#xff0c;而缩略图中的矩形区域为视图中的可见区。 获取视图中滚动条的值&#xff0c;将其值与缩略图所在的小窗口对比&#xff0c;可通过绘图求其比例&#xff0c;再按比例缩小。 首先提供主…

OpenGL ES EGL eglChooseConfig

目录 一. EGL 前言二. EGL 绘制流程简介三.eglGetConfigs 函数简介 四.eglGetConfigs 函数使用五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基…

第九篇:Spring Boot整合Spring Data JPA_入门试炼03

CrudRepository接口的使用 CrudRepository接口&#xff0c;主要完成一些增删改查的操作。 注意&#xff1a;CrudRepository接口继承Repository接口 1、持久层接口&#xff1a; package com.gblfy.repository;import com.gblfy.pojo.Users; import org.springframework.data.r…

第九篇:Spring Boot整合Spring Data JPA_入门试炼04

六、PagingAndSortingRepository接口 前言&#xff1a;该接口提供了分页与排序的操作&#xff0c;该接口继承了CrudRepository 1、持久层接口&#xff1a; public interface UserRepositoryPagingAndSorting extends PagingAndSortingRepository<Users,Integer> { }测试…

qt创建图形项,添加自定义窗口

创建场景&#xff0c;视图和图形项之后&#xff0c;在图形项中添加自定义窗口。主要代码如下&#xff1a; scene new QGraphicsScene(0,0,1855,578,ui->insideWidget);//在开发中QGraphicsScene::sceneRect最好小于等于QGraphicsView::sceneRect大小&#xff0c;以保证在缩…

成立一周?谷歌人工智能道德委员会解散了?近日,金山云和小米刚签订了不超过9000万的硬件产品供应协议,闹哪样? | 极客头条...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 亚马逊推Alexa无线耳机&…

java.sql.SQLException: validateConnection false

解决方案&#xff1a; 将mysql-connector-java版本修改为下面版本&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.0.2</version> </dependency>

第九篇:Spring Boot整合Spring Data JPA_入门试炼05

JpaRepository接口 前言&#xff1a;该接口继承了PagingAndSortingRepository接口。对继承的父接口中方法的返回值进行适配。 例如&#xff1a;父接口中的方法的返回值是是迭代器&#xff0c;而在子类(JpaRepository)返回值是Lis集合。 1、持久层接口&#xff1a; public inte…

2019年技术盘点微服务篇(二):青云直上云霄 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员硬核评测&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;作者&#xff1a;孙浩峰过去几年来&#xff0c;“微服务架构”方兴未艾&#xff0c;尽管这种…