【问题标题】:Retina support in Qt5 on OS XOS X 上 Qt5 中的 Retina 支持
【发布时间】:2016-03-31 15:34:48
【问题描述】:

我正在 Retina MacBook Pro 上的 OS X El Capitan 上使用 Qt 5.5.0 编写 C++ 图形应用程序。整个应用程序中的文本都是像素化的,所以我怀疑没有使用高 DPI 模式。我的 Info.plist 包含以下定义:

<key>NSHighResolutionCapable</key>
    <true/>

如何在 OS X 上的 Qt 应用程序中启用高分辨率模式(尤其是文本渲染)?

【问题讨论】:

  • 我的 Qt Widgets 应用程序在视网膜上非常好,我的 .plist 中没有那个键。事实上,我没有特殊的钥匙。刚刚检查过。
  • 只是想补充一点,应用程序中的所有文本都是像素化的,甚至是系统对话框。

标签: c++ macos qt retina


【解决方案1】:

您还需要致电QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps) 刚刚创建QApplication 对象以能够使用高 DPI 像素图。在这里阅读更多:http://doc.qt.io/qt-5/qpixmap.html#devicePixelRatio

【讨论】:

    【解决方案2】:

    确保您的 info.plist 具有 NSPrincipalClassNSApplication 键。根据Qt docsNSHighResolutionCapable 是可选的,默认为true。这是我的整个 plist 供参考:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
    <plist version="0.9">
    <dict>
        <key>NSPrincipalClass</key>
        <string>NSApplication</string>
        <key>CFBundleIconFile</key>
        <string>@ICON@</string>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleGetInfoString</key>
        <string>Created by Qt/QMake</string>
        <key>CFBundleSignature</key>
        <string>@TYPEINFO@</string>
        <key>CFBundleExecutable</key>
        <string>@EXECUTABLE@</string>
        <key>CFBundleIdentifier</key>
        <string>com.my.@EXECUTABLE@</string>
    </dict>
    </plist>
    

    如果您坚持手动指定 NSHighResolutionCapable,请注意您在问题中做错了。以下是来自同一文档的正确语法:

    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
    <key>NSHighResolutionCapable</key>
    <string>True</string>
    

    【讨论】:

    • 我试过你的 plist 并手动正确指定 NSHighResolutionCapable 但它仍然模糊/像素化。
    • 再测试一下,你的答案其实是正确的。我的运行目录包含 .plist 的旧副本。不需要手动设置NSHighResolutionCapable
    • @SurvivalMachine: 除非你需要它,否则我很确定你可以完全扔掉 plist。没有它也应该可以工作。
    • 非常感谢...超级明显(讽刺,非常感谢 Apple)添加 NSPrincipalClass 等于 NSApplication 并且它确实开始工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2011-05-23
    • 2020-11-11
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多