Qt分辨率适配

在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);
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值