我可以在运行时更改像素比(屏幕)吗?

时间:2018-01-25 17:59:38

标签: qt qwidget

Qt确实支持我的各种桌面上不同的像素比率(./a.out):

  1. )桌面w1920 w1080 - 比率:1
  2. )桌面w3840 w2160 devicePixelRatio导致桌面w1280 w720 hi DPI 比率:3
  3. )桌面w3840 w2160 - 比率:1 没有qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1")
  4. 我想知道我是否可以为我的应用程序手动调整此比率,例如使用"比率2"在上面的例子2中。

    那么有没有办法在运行时设置这个值?

    基于http://doc.qt.io/qt-5/highdpi.html,我确实尝试了类似

    QT_AUTO_SCREEN_SCALE_FACTOR

    实际上我确实期望设置qputenv("QT_SCALE_FACTOR", QString::number(scaleFactor).toLocal8Bit()); 看起来像上面的数字2,但它不一样。 1-4看起来很奇怪。

    以下3行看起来类似于int scaleFactor = 3(基于https://stackoverflow.com/a/45168724/356726

    qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1")

    PS:跟进

1 个答案:

答案 0 :(得分:1)

这是我当前被要求解决的问题。只有在构造UI之前,它才起作用,因此我一开始就将其称为

在高DPI屏幕上传递大约1.0(例如0.75)的值。但是我以后不能更改。

void CGuiApplication::highDpiScreenSupport(double scaleFactor)
{
    if (scaleFactor < 0)
    {
        qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
    }
    else
    {
        QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support
        QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); // HiDPI pixmaps
        const QString sf = QString::number(scaleFactor, 'f', 2);
        qputenv("QT_SCALE_FACTOR", sf.toLatin1());
    }
}