本人用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")
不懂可以评论区问我