检测hiDPI模式

Jas*_*enX 6 qt qt4 qt4.8

在OS X上使用Qt 4.8.4 - 桌面应用程序开发.我需要能够在绘画时检测我是否在hiDPI显示器("视网膜")上.有谁知道如何实现这一目标?

Ven*_*emo 5

您可以QScreen在 Qt 5 中使用它,在 Qt 4 中您可以使用QSystemDisplayInfoQt Mobility 中的类。

对于 Qt 4

QSystemDisplayInfo- http://doc.qt.digia.com/qtmobility/qsystemdisplayinfo.html

相关方法是getDPIHeightgetDPIWidth

您也可以使用QDesktopWidget'sphysicalDpiXphysicalDpiY方法。

对于 Qt 5

使用QScreen- http://qt-project.org/doc/qt-5.0/qtgui/qscreen.html#physicalDotsPerInch-prop

((QGuiApplication*)QCoreApplication::instance())
    ->primaryScreen()->physicalDotsPerInch()
Run Code Online (Sandbox Code Playgroud)

还有physicalDotsPerInchXphysicalDotsPerInchY


Jas*_*enX 4

最终我创建了一个小的可可函数来为我返回这个值。我用它来确定paintEvent的时间是否应该使用hiDPI图像。在我的 MacBook Pro 15" Retina 上使用起来就像魅力一样。

bool MYAppCocoaServices::isHiDPI(QWidget * widget)
{
    NSView* view = reinterpret_cast<NSView*>(widget->winId());
    CGFloat scaleFactor = 1.0;
    if ([[view window] respondsToSelector: @selector(backingScaleFactor)])
        scaleFactor = [[view window] backingScaleFactor];

    return (scaleFactor > 1.0);
}
Run Code Online (Sandbox Code Playgroud)

我仅在 Mac 上有条件地构建此 .mm 文件,并从 Mac 上的 C++ 代码调用此静态函数。