Как решить проблему HiDPI с приложениями Qt

Как решить проблему HiDPI с приложениями Qt

Недавно я начал использовать команду xrandr --dpi 166для своего нового ноутбука под управлениемUbuntu 16.04.3 64-битзаметив, что в противном случае система автоматически использует 96 точек на дюйм.

Однако такое высокое разрешение приводит к чрезвычайно большим меню и панелям инструментов.только в приложениях QtУ меня есть такие, как Master PDF Editor, digiKam и Krita (последние два в формате AppImage). Другие приложения, работающие в среде Java или WINE, не создают таких проблем.

Я надеюсь найти способ вручную ввести определенную настройку dpi для приложений Qt или какой-то другой способ решения этой проблемы.

Если нет возможности глобально указать настройку dpi для приложений Qt, возможно, xrandr --dpi 96можно было бы использовать простой скрипт-обертку, который вводит начальную настройку dpi до и восстанавливает ее после такого приложения...

решение1

Неидеальное временное решение, которое я нашел, — это следующий простой скрипт-обертка bash, который можно использовать в соответствующем файле .desktop вместо исполняемого файла рассматриваемого приложения, например masterpdfeditor4:

#!/bin/bash
HiDPI="$(xdpyinfo | grep dots | awk -F'x' '{print $2}' | awk -F' ' '{print $1}')"
if [[ ! $HiDPI = 96 ]]
then
    xrandr --dpi 96
    masterpdfeditor4 "$@"
    xrandr --dpi $HiDPI
else
    masterpdfeditor4 "$@"
fi

Это восстановит исходную настройку dpi только в том случае, если одно такое приложение будет открыто и закрыто, или, если запущено более одного такого приложения, только если первое приложение будет закрыто последним.

Во-вторых, некоторые элементы графического интерфейса, кроме меню и панелей инструментов, по какой-то причине не могут быть исправлены таким способом, например, размер курсора в рабочей области Krita...

решение2

Мне удалось добиться довольно хороших результатов, настроив некоторые переменные среды Qt, а именно QT_AUTO_SCREEN_SCALE_FACTORи QT_SCALE_FACTOR. Вы можете выбрать собственные значения, которые могут лучше подойти для вашего случая:

$ QT_AUTO_SCREEN_SCALE_FACTOR=0 QT_SCALE_FACTOR=1.1 virtualbox

Более подробную информацию о переменных Qt можно найти здесь:https://doc.qt.io/qt-6.2/highdpi.html

Связанный контент