赞
踩
在Main函数开头调用HighDpiAdapt()函数
#include "HighDpiAdapt.h" #include <iostream> #include <QGuiApplication> #include <Windows.h> #include <WinUser.h> 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); }
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。