#include "mainwindow.h"
#include <iostream>
#include <QGuiApplication>
#include <Windows.h>
#include <WinUser.h>
#include <QApplication>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
using namespace std;
//将wstring转换成string
string wstring2string(wstring wstr)
{
string result;
//获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的
int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);
char* buffer = new char[len + 1];
//宽字节编码转换成多字节编码
WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
buffer[len] = '\0';
//删除缓冲区并返回值
result.append(buffer);
delete[] buffer;
return result;
}
void HighDpiAdapt() {
// 获取当前显示器的数目
int numbers = GetSystemMetrics(SM_CMONITORS);
string scale_name = "";
for (int i = 0; i < numbers; ++i)
{
DISPLAY_DEVICEW device;
device.cb = sizeof(device);
BOOL result = EnumDisplayDevicesW(NULL, i, &device, 0);
DEVMODEW device_mode;
device_mode.dmSize = sizeof(device_mode);
device_mode.dmDriverExtra = 0;
result = EnumDisplaySettingsExW(device.DeviceName, ENUM_CURRENT_SETTINGS, &device_mode, 0);
string screen_name = wstring2string(device.DeviceName);
scale_name += screen_name;
scale_name += (device_mode.dmPelsWidth > 1920) ? "=1.5;" : "=1;"; //设置不同的缩放比例系数
}
scale_name[scale_name.size() - 1] = '\0';
qputenv("QT_SCREEN_SCALE_FACTORS", scale_name.c_str());
//处理图像模糊问题
QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
//禁止高缩放支持
//QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling); //AA_EnableHighDpiScaling
//程序保持默认的尺寸,不缩放
QGuiApplication::setAttribute(Qt::AA_Use96Dpi);
}
int main(int argc, char *argv[])
{
HighDpiAdapt(); //自适应分辨率
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
解决QT打包在不同电脑分辨率适应问题
最新推荐文章于 2024-04-29 21:03:23 发布