【问题标题】:Can I change the pixel ratio (screen) at runtime?我可以在运行时更改像素比(屏幕)吗?
【发布时间】:2018-07-05 01:47:42
【问题描述】:

Qt 确实支持像素比 (devicePixelRatio),这在我的各种桌面上是不同的:

  1. ) 桌面 w1920 h1080 - 比率:1
  2. ) Desktop w3840 h2160 with qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1") 导致 Desktop w1280 h720 hi DPI ratio: 3
  3. ) 桌面 w3840 h2160 - ratio: 1 没有QT_AUTO_SCREEN_SCALE_FACTOR

我想知道是否可以为我的应用程序手动调整此比率,例如在上面的示例 2 中使用“比率 2”。

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

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

qputenv("QT_SCALE_FACTOR", QString::number(scaleFactor).toLocal8Bit());

实际上,我确实希望设置 int scaleFactor = 3 看起来像上面的数字 2,但它不一样。 1-4 看起来也很奇怪。

以下 3 行类似于qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1")(基于https://stackoverflow.com/a/45168724/356726

QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); //HiDPI pixmaps
qputenv("QT_SCALE_FACTOR", "1");

PS:后续跟进

【问题讨论】:

  • 你有没有想过解决方案?
  • 部分,以后有时间会发在这里
  • 我当前的解决方法发布在下面,它是在运行时但不是在任何时候(目标是什么)

标签: qt qwidget


【解决方案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());
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多