Qt 5.7 утверждает, что имеет улучшенную поддержку высокого DPI. С помощью современного Qt можно создать стартер приложения, такой как:
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
return app.exec();
}
Я ожидаю, что пользовательский интерфейс будет автоматически масштабироваться при работе с высоким DPI, но масштабирование не обязательно будет работать должным образом. По крайней мере, он не масштабируется для меня под Linux. Я вижу, что макет масштабируется, но шрифты остаются там, где они были, в тех размерах, которые Qt Creator назначил им в инструменте макета формы.
Если вы хотите увеличить шрифт большего размера для какого-либо элемента и установить его на экране «Дизайн формы», кажется, нет способа сказать «в два раза больше». Вместо этого он вводит свойство шрифта с абсолютным размером точки.
Похоже, то же самое относится и к статическим методам QMessageBox. Отображение статического QMessageBox, например QMessageBox::info
и его текст и значок не увеличиваются, чтобы компенсировать высокое dpi.
Итак, что именно вы должны сделать, чтобы ваше приложение Qt, разработанное в Creator со стандартным DPI, автоматически настраивалось на среду с высоким DPI, шрифты, QMessageBoxes и все остальное.
Я получил некоторую тягу, настраивая таблицу стилей приложения, чтобы использовать больший шрифт для QMessageBox. но это кажется уродливым, и я не уверен, как вызвать его автоматически.
РЕДАКТИРОВАТЬ:
Ручная настройка переменной среды
declare -x QT_SCALE_FACTOR=2
Кажется, вызывает то поведение, которое я ищу. Но как сделать это автоматически только в среде с высоким разрешением, и желательно внутри самой программы. ( setenv (3)
может работать под Linux, наверное)
Начиная с Qt5.11, для моего ноутбука Ubuntu 18.04 с экраном 4k кажется достаточно хорошим:
~/.local/share/applications/DigiaQt-qtcreator-community.desktop
файл.Exec=/path/to/Qt/Tools/QtCreator/bin/qtcreator
в Exec=env QT_AUTO_SCREEN_SCALE_FACTOR=1 /path/to/Qt/Tools/QtCreator/bin/qtcreator
Других решений пока нет …