Каков наилучший способ масштабирования изображений для высокого DPI в Qt5? - PullRequest
0 голосов
/ 03 мая 2018

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

Я посмотрел на функцию devicePixelRatioF (), но она всегда возвращает 1. В моей системе включено 150% масштабирование, поэтому, если я жестко закодировал 1,5 в качестве коэффициента масштабирования, то изображения имеют ожидаемые размеры относительно окна. Вопрос в том, как получить масштабный коэффициент системы, чтобы приложение выглядело одинаково для всех систем с различным разрешением / масштабированием? Как и Windows, приложение построено для Linux.

Буду признателен за любой совет.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

О экранах с высоким разрешением : я думаю, вы должны взглянуть на свойство QScreen::devicePixelRatio, которое

содержит соотношение экрана между физическими пикселями и независимые от устройства пиксели

и используют возвращаемое значение для установки отношения растровых изображений с помощью QPixmap::setDevicePixelRatio.

Например:

#include <QApplication>
#include <QDebug>
#include <QScreen>
#include <QPixmap>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPixmap p(32, 32);
    QScreen * screen = a.primaryScreen();
    p.setDevicePixelRatio(screen->devicePixelRatio());

    //...

    return a.exec();
}

О системном масштабировании , вы можете иметь ключ, проверяющий свойство QScreen::logicalDotsPerInch, например:

int scaling_percent = (screen->logicalDotsPerInch() / 96) * 100;
0 голосов
/ 03 мая 2018

Этот вопрос меня тоже побил. Об этом также сообщается в Qt's bug tracker здесь .

Проблема в том, что 150% масштабирования в Windows не выполняется путем масштабирования всех пикселей с коэффициентом 1,5, а, скорее, масштабирования шрифтов и "корректировки" пользовательского интерфейса соответственно. Вот почему интервалы и макеты выглядят очень странно, если выбрано масштабирование 150%.

Поскольку devicePixelRatio () запрашивает фактическое соотношение пикселей, и оно не изменяется при установке его на 150% в Windows, оно по-прежнему возвращает 1.

Если вам действительно нужно значение 1,5 для правильного масштабирования ваших растровых изображений, вы можете самостоятельно рассчитать фактический коэффициент, запросив DPI (см. Документацию здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...