![Как решить проблему HiDPI с приложениями Qt](https://rvso.com/image/898943/%D0%9A%D0%B0%D0%BA%20%D1%80%D0%B5%D1%88%D0%B8%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%83%20HiDPI%20%D1%81%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%D0%BC%D0%B8%20Qt.png)
Недавно я начал использовать команду 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