qt程序在不同分辨率和缩放比情况下保持视觉效果相同
2025-04-11 本文已影响0人
豪爵吸金ing
#include <QApplication>
#include <QtWidgets>
qreal getSystemDpiRatio(){
QScreen* screen = QGuiApplication::primaryScreen();
return screen ? screen->logicalDotsPerInch()/96.0 : 1.0;
}
void logDpi(int argc, char *argv[]){
auto systemDpiRatio = getSystemDpiRatio();
qreal targetScale = 2.0 /systemDpiRatio;
QString scaleStr = QString::number(targetScale,'f',4);
qDebug()<<"==========systemDpiRatio :"<<systemDpiRatio;
qDebug()<<"============scaleStr :"<<scaleStr;
}
void myDemoFun(){
// 创建主窗口
QWidget *mainWindow = new QWidget;
mainWindow->setWindowTitle("Image Viewer");
// 创建滚动区域
QScrollArea *scrollArea = new QScrollArea;
scrollArea->setWidgetResizable(true); // 设置为可调整大小
// 创建 QLabel 用于显示图片
QLabel *imageLabel = new QLabel;
QPixmap image("D:/demo.jpg"); // 加载图片
// 检查图片是否加载成功
if (image.isNull()) {
qWarning("Could not load image abc.jpg");
return;
}
imageLabel->setPixmap(image); // 设置标签的图片
scrollArea->setWidget(imageLabel); // 将标签添加到滚动区域
// 设置布局
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(scrollArea);
mainWindow->setLayout(layout);
mainWindow->showFullScreen();
}
void setManScaleFactor(int argc, char *argv[]){
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
// 获取系统DPI缩放比例
qreal systemDpiRatio = getSystemDpiRatio();
// 获取屏幕逻辑尺寸
QScreen* screen = QGuiApplication::primaryScreen();
QRect screenGeometry = screen->geometry();
// 计算物理尺寸(逻辑尺寸 * 系统缩放)
int physicalWidth = screenGeometry.width() * systemDpiRatio;
int physicalHeight = screenGeometry.height() * systemDpiRatio;
// 计算目标缩放因子
qreal screenRatio = sqrt((physicalWidth * physicalHeight) / (1920.0 * 1080.0));
qreal targetScale = screenRatio / systemDpiRatio;
// 设置环境变量
QString scaleStr = QString::number(targetScale, 'f', 2);
qputenv("QT_SCALE_FACTOR", scaleStr.toUtf8());
qDebug() << "System DPI Ratio:" << systemDpiRatio;
qDebug() << "Physical Resolution:" << physicalWidth << "x" << physicalHeight;
qDebug() << "Calculated QT_SCALE_FACTOR:" << targetScale;
}
int main(int argc, char *argv[]) {
setManScaleFactor(argc,argv); //手动设置缩放
QApplication app(argc, argv);
myDemoFun();//测试程序
return app.exec();
}