Таблицы стилей/Поддержка Qt Designer для экранов с высоким разрешением?

Сегодня я перенес свое приложение с Qt5.5 на Qt5.6RC. Запустив его на моем экране с высоким dpi, виджеты выглядели крошечными. После прочтения этого и установки QT_AUTO_SCREEN_SCALE_FACTOR to "1", по крайней мере, его можно снова использовать.

Однако они говорят:

В более долгосрочной перспективе приложение должно быть адаптировано для запуска немодифицированных:

1) Всегда используйте qreal версии API рисования QPainter.
2) Размер окон и диалогов в зависимости от размера экрана.
3) Замените жестко заданные размеры в макетах и коде чертежа на значения, рассчитанные по метрикам шрифта или размеру экрана.

Не все атрибуты таблицы стилей поддерживают em (".. from metrics font"). Понятия не имею, как бы я использовал относительный размер экрана в таблицах стилей. Также Qt Designer поддерживает только px во многих местах, как показано ниже.

icon size

Учитывая, что я не хочу отказываться от дизайнера и таблиц стилей, какие у меня есть варианты для создания настоящих приложений Qt Hires?


Связано (но нет ответа на мой вопрос)

Ответ 1

Если вы действительно продали использование Designer, возможно, стоит подумать об обновлении таблиц стилей программным способом. Это действительно хакерское исправление, которое я реализовал в приложении, которое мне пришлось развернуть на нескольких платформах. Это будет означать использование измерений px для всего, поскольку это единственное широко поддерживаемое измерение.

Как вы, возможно, знаете, шрифты Qt не поддерживают относительные единицы размера экрана em:

Из документации Qt5: https://doc.qt.io/qt-5/stylesheet-reference.html Qt ограничен размерами шрифта в pt и px, а любой другой размер должен быть в px, em или ex.

Какой бы монитор и его спецификации вы не разработали, вы будете довольны стандартом вашего приложения. В конструкторе ваших окон вы можете рассчитать масштабный коэффициент как отношение DPI нового устройства, деленное на "стандартный DPI", на котором, как вы знаете, ваше приложение выглядит хорошо. Оттуда вам просто нужно будет умножить таблицы стилей виджетов/шрифтов на этот масштабный коэффициент. Это может показаться громоздким (и это определенно так), но это будет означать итерацию QString, возвращаемой ui-> myWidget-> getStyleSheet(), и масштабирование всех числовых экземпляров, предшествующих подстроке px.

Это сработало для меня при увеличении/уменьшении шрифтов и размеров виджетов, но с явно добавленными накладными расходами. Мне также очень нравится простота использования Designer, но, на самом деле, создание масштабируемого пользовательского интерфейса остается трудным в Designer. Переход на программный дизайн пользовательского интерфейса закончился заменой моего хакерского исправления для моего приложения.

Примечание. Также важно следить за тем, какие шрифты вы используете. Если ваш шрифт не является системным шрифтом, значение px будет иметь неожиданное поведение, поскольку шрифт по умолчанию заменит его.

Ответ 2

не уверен, что это поможет, так как я никогда не использовал конструктор для своих приложений qt, но, думаю, в какой-то момент вам придется делать что-то вроде некоторых веб-сайтов и иметь некоторые выделенные qss файлы на основе вашего разрешения экрана.

Я думаю, что это очень легко сделать в CSS3, не уверен, что поддерживается в qss. Я нашел это сообщение, объясняющее, как получить разрешение экрана основного дисплея: QT получает разрешение экрана без расширенного монитора

Для вопроса "1em", даже если вы не установили размер шрифта, по умолчанию будет выбрано, поэтому 1em будет означать 100% вашего размера шрифта по умолчанию, который я предполагаю.

С уважением.