检测hiDPI模式

时间:2013-05-13 17:42:42

标签: qt qt4 qt4.8

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

2 个答案:

答案 0 :(得分:4)

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

对于Qt 4

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

相关方法为getDPIHeightgetDPIWidth

您还可以使用QDesktopWidget的{​​{1}}和physicalDpiX方法。

对于Qt 5

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

QScreen

还有((QGuiApplication*)QCoreApplication::instance()) ->primaryScreen()->physicalDotsPerInch() physicalDotsPerInchX

答案 1 :(得分:4)

最后我刚刚创建了一个小的cocoa函数来为我返回这个值。我用它来确定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);
}

我只在Mac上有条件地构建这个.mm文件,并在Mac上用我的c ++代码调用这个静态函数。