【问题标题】:How to get the DPI of the display screen in QtQt中如何获取显示屏的DPI
【发布时间】:2022-04-15 13:39:27
【问题描述】:

我需要获取Qt中显示的DPI值。我可以使用以下方法在 Qt 5.0 中获得它:

#include <QScreen>

......
......
QScreen *srn = QApplication::screens().at(0);
qreal dotsPerInch = (qreal)srn->logicalDotsPerInch();

但相同的代码在 Qt 4.x 版本中会引发编译错误。我的项目是在 Qt 版本 4.x 中开发的。所以我需要在 Qt 4.x 版本中与上述代码等效。

【问题讨论】:

    标签: qt


    【解决方案1】:

    在 Qt 4.8 中,这似乎可以解决问题:

    #include <QDesktopWidget>
    
    ...
    int dpiX = qApp->desktop()->logicalDpiX();
    ...
    

    【讨论】:

      【解决方案2】:

      在 Qt5 中获取信息的另一种方式:
      QWidget 包含 physicalDpiX、physicalDpiY、logicalDpiY 等...
      (QWidget 从 QPaintDevice 继承它们。)
      (以为OP说的是Qt4,但Qt5目前正在开发中。)


      故事:
      我遇到了同样的问题。
      在@code_fodder 回答之后(虽然不完整但仍然值得称赞)。
      提到的 QPaintDevice 包含那些相关的方法。

      仔细阅读后,注意到了,
      QWidget 继承了 QObject 和 QPaintDevice,当我看到时,就是这样!

      【讨论】:

      • 返回任何给定小部件当前呈现到的显示器的显示指标。问题是要求特定显示的显示指标。这个答案没有解决这个问题。
      【解决方案3】:

      我认为这是 Qt5 的补充。对于 Qt4 或更早版本(我认为它在 3 中受支持...但不记得了),您可以使用 QPaintDevice 获取类似信息。 以下是对您有用的功能,具体取决于您需要做什么:

      #include <QPaintDevice>
      ...
      
      QPaintDevice paint;
      int dpiX = paint.logicalDpiX();
      int dpiY = paint.logicalDpiY();
      int width = paint.widthMM();
      int height = paint.heightMM();
      

      注意:这不是一个实现,只是示例函数调用。

      【讨论】:

      • 导致“无法实例化抽象类”错误。
      • @AntonTugolukov 注意:This is not an implementation, just example function calls :)
      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多