解决QT打包在不同电脑分辨率适应问题

#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();
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt应用程序需要在不同分辨率和缩放下正确地缩放和显示,以确保用户界面的可用性和易用性。以下是一些在Qt中实现正确缩放的最佳实践: 1. 使用布局管理器:Qt的布局管理器可以自动调整窗口中的小部件位置和大小,以适应不同的窗口大小和分辨率。使用布局管理器可以使你的应用程序在不同分辨率和缩放下正确地显示。 2. 使用矢量图形:矢量图形可以无损地缩放,因此它们是在高分辨率屏幕上正确显示的理想选择。Qt支持许多矢量图形格式,如SVG和PDF。 3. 使用高DPI图像:如果你必须使用位图图像,你应该为不同的DPI提供不同的图像版本。例如,你可以使用@2x后缀为高DPI显示器提供2倍大小的图像,使用@3x后缀为超高DPI显示器提供3倍大小的图像。 4. 使用像素密度独立的字体:Qt的字体类支持像素密度独立的字体,这些字体可以在不同分辨率和缩放下正确显示。你可以使用QFont类的setPixelSize()方法来设置像素密度独立的字体大小。 5. 启用高DPI支持:如前所述,启用Qt应用程序的高DPI支持可以确保它正确地显示在高分辨率屏幕上。你可以在应用程序的main()函数中调用QApplication::setAttribute()方法来启用高DPI支持,如下所示: ``` int main(int argc, char *argv[]) { QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app(argc, argv); ... } ``` 这将使你的应用程序正确地缩放和显示,以适应不同分辨率和缩放。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值