QT高分辨率自适应4k

本人用Qt 5.14.0版本

一、在4k显示器下,使得字体和组件分辨率高清

1.在main函数的最前面加入 

QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 

在官网的解释Qt::AA_EnableHighDpiScaling

也就是自适应高分辨屏幕,对于支持高 DPI 的窗口部件,启用此属性将使其能够根据屏幕 DPI 进行自动缩放,以确保正确的大小和布局。

2.上述设置在分辨率为3840*2160下,只有170%比例大小下适用,想要在150%下使用就要在mian的最前面加上

QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Round);

官网解释如下Qt::HighDpiScaleFactorRoundingPolicy

也就是说比例大小为150%,175%都是以200%来计算的。

二、4k高清图标

虽然上述字体和组件进行了高分辨率适配,但组件上的图标的像素要大于原先2k图标像素的2倍,才能在4k屏幕凸显的高清。

(1)第一种方法:使用qss方法,自适应的应用图片

1.首先一定要在mian.cpp最前面写上

int main(int argc, char *argv[])
{

    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);  //dip,也就是在4k屏上更大,更清晰
    QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Round); // 让3840*2160也能使用150%的缩放大小
    QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); // icon_4k()可以实现,图标清晰
    QApplication a(argc, argv);
    Widget w;
    w.show();
   return a.exec();
}

2.创建一个css文件,并且把css里面设置加载到qt组件中

void Widget::load_css()
{
    QFile file(":/photo/png/qwidget.css"); // 自己的css文件目录
    file.open(QIODevice::ReadOnly);
    QString stylesheet = QLatin1String(file.readAll());
    file.close();
    this->setStyleSheet(stylesheet);

}

3.qwidget.css文件内容大致

#pushButton_1{ // 按钮name
	border-radius: 40px 40px 40px 40px;
	background-color: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 rgba(34,40,41,0), stop:1 rgba(129,137,138,0.21));
	opacity: 1;
	border: 1px solid #56442A;
	background-image: url(:/photo/png/yes.png);
	/* background-origin: content; */
    background-position: top;
    padding-top: 62px;

	text-align: bottom;
	padding-bottom:38px;
	font-size: 20px;
	font-family: PingFang SC;
	font-weight: normal;
	color: #CFAA66;
	line-height: 0px;
}

background-image: url(:/photo/png/yes.png);如果你分辨率设置到1080*2060会自动应用yes.png,如果分辨率设置为3840*2160,也就是4k,会自动应用yes@2x,png.是根据图片的名字来自适应的,但首先yes@2x.png也得是yes.png像素的二倍才有效果。

(2)第二种方法:用QIcon来设置

1.首先一定要在mian.cpp最前面写上QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); 

int main(int argc, char *argv[])
{

    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);  //dip,也就是在4k屏上更大,更清晰
    QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Round); // 让3840*2160也能使用150%的缩放大小
    QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); // icon_4k()可以实现,图标清晰
    QApplication a(argc, argv);
    Widget w;
    w.show();
   return a.exec();
}

2.随便创建一个控件label_4k,我是在widget.cpp中。

// 获取主屏幕对象
     QScreen *screen = QGuiApplication::primaryScreen();

//     // 获取屏幕的分辨率
     int width = GetSystemMetrics(SM_CXSCREEN); //开头加#pragma comment(lib, "user32.lib")
     int height = GetSystemMetrics(SM_CYSCREEN);
     QSize iconSize(30, 30); 该尺寸是照片在控件中显示的大小
     if(width == 1920 && height == 1080)// 2k分辨率
     {
         QIcon icon(":/photo/png/yes.png");
         ui->label_4k->setPixmap(icon.pixmap(iconSize, QIcon::Normal, QIcon::On));
     }
     else if(width == 3840 && height == 2160) // 4k分辨率
     {
         QIcon icon(":/photo/png/yes@2x.png");
         ui->label_4k->setPixmap(icon.pixmap(iconSize, QIcon::Normal, QIcon::On));
     }

yes@2x.png也得是yes.png像素的二倍才有效果。

3.在widget.h中,我是如下设置的,建议查找自己需要的使用

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QButtonGroup>
#include <QFile>
#include <QDebug>
#include <QScreen>
#include <QDesktopWidget>
#include <QDir>
#include <QFileInfoList>
#include <QPixmap>
#include <windows.h>
#include <utility>
#include <QMutex>
#include <QLoggingCategory>
#include <QFileInfo>
#include <QDateTime>
#include <QIcon>
#pragma comment(lib, "user32.lib")

不懂可以评论区问我

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值