Qt: долгосрочная адаптация для запуска приложения без изменений / независимо от разрешения дисплея - PullRequest
0 голосов
/ 20 сентября 2019

Я просматриваю High Dpi информацию на Qt сайте.В основном у меня есть старое приложение, которое должно быть запущено на сенсорном дисплее High DPI.Каждая иконка кажется маленькой.Я хочу планировать установить некоторые переменные окружения и setAttributes, чтобы позволить моему приложению работать с минимальным временем.Однако я наткнулся на последнюю строку в приведенной выше ссылке, которая гласит:

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

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

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

1 Ответ

1 голос
/ 20 сентября 2019

На самом деле я не думаю, что речь идет о таблицах стилей.То, что вы процитировали для миграции существующих приложений .

Последнее предложение является продолжением второго.


Предположим, у васзакодированные значения (таким образом, фиксированные), чтобы определить размеры ваших окон, виджетов, макетов, ... и однажды вы захотите сменить экран на другой с другим разрешением, размером, dpi, ... затем жестко закодированнымзначения могут быть не адаптированы и, следовательно, нарушать отображение.

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

Итак, когда вы определяете, например, sizeHint() пользовательского виджета (при необходимости), не возвращайте абсолютные / жестко закодированные значения, а вместо этого возвращайте значения вотношение к родительскому контейнеру, геометрия экрана, ... все, что вы хотите, будет динамически адаптировано на другом оборудовании / платформе.Как можно больше.

Qt предоставляет методы для получения фактической геометрии экрана, такие как QDesktopWidget()::screenGeometry().

Например, если вы хотите определить размер основного окна, вы можете написать что-то вроде:

// Assuming that MainWindow inherits QMainWindow

MainWindow::MainWindow
{
    resize(QApplication::desktop()->screenGeometry().width()/2, QApplication::desktop()->screenGeometry().height()/2);

    // ...
}

Объект MainWindow теперь будет иметь половину размера экрана, независимо от того,экран.


РЕДАКТИРОВАТЬ: Для размеров шрифта любой построенный по умолчанию QFont уже будет адаптирован к предпочтительному размеру системы.См. Следующую ветку SO: Как узнать размер шрифта системы по умолчанию в Qt

...