Qt 6.4在Windows下示例程序High DPI缩放无法开箱即用求助
Qt 6.4.3双显示器高DPI缩放异常解决方案
针对你遇到的双显示器(100%/200%缩放)下单选框、复选框图标缩放异常的问题,可通过以下配置修复:
1. 嵌入Windows高DPI兼容Manifest文件
Qt Creator能正常缩放是因为其嵌入了正确的高DPI声明,而你的应用缺少该配置。创建以下文件并添加到项目中:
步骤1:创建app.manifest文件
<?xml version="1.0" encoding="UTF-8"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <assemblyIdentity version="1.0.0.0" name="YourApplicationName.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>True/PM</dpiAware> </asmv3:windowsSettings> </asmv3:application> </assembly>
True/PM表示应用支持每显示器DPI缩放,是Windows 10及以上的推荐配置。
步骤2:关联Manifest到项目
创建app.rc文件:
1 24 "app.manifest"
在.pro文件中添加:
RC_FILE += app.rc
重新编译项目后,manifest会嵌入到可执行文件中,让Windows识别应用的高DPI兼容性。
2. 显式配置Qt高DPI属性
在main函数创建QApplication前,添加以下属性设置,确保Qt启用完整的高DPI支持:
#include <QApplication> #include <QWidget> int main(int argc, char *argv[]) { // 启用高DPI像素图支持 QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); // 启用样式表在高DPI下的正确传播 QApplication::setAttribute(Qt::AA_UseStyleSheetPropagationInWidgetStyles); QApplication app(argc, argv); Window window; window.show(); return app.exec(); }
注:Qt 6默认已启用
Qt::AA_EnableHighDpiScaling,无需重复设置,但显式添加上述两个属性可解决部分边缘场景的缩放问题。
3. 调整缩放取整策略
若仍存在图标缩放不精确的问题,可设置环境变量禁用缩放取整:
// 在main函数开头添加 qputenv("QT_SCALE_FACTOR_ROUNDING_POLICY", "PassThrough");
该配置让Qt直接使用精确的缩放因子,避免因取整导致的元素尺寸异常。
4. 切换到高DPI友好的样式
部分旧样式对高DPI支持不佳,可切换到Qt的Fusion样式或Windows原生现代样式:
// 在创建QApplication后添加 app.setStyle(QStyleFactory::create("Fusion"));
按上述步骤依次配置后,应用应能在双显示器下正确响应不同缩放比例,单选框、复选框等元素的图标会和字体同步缩放。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

