6

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

4

2 回答 2

5

您可以QScreen在 Qt 5 中使用它,在 Qt 4 中您可以使用QSystemDisplayInfo来自 Qt 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()

还有physicalDotsPerInchXphysicalDotsPerInchY

于 2013-05-13T17:59:22.133 回答
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);
}

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

于 2013-05-18T17:24:34.290 回答