У нас есть различные изображения в нашем приложении (отображаемые из QPixmap в QLabel), которые отображаются с разумным размером на экранах с низким разрешением, но уменьшаются при высоком разрешении. Другие элементы интерфейса выглядят хорошо.
Я посмотрел на функцию devicePixelRatioF (), но она всегда возвращает 1. В моей системе включено 150% масштабирования, поэтому, если я жестко закодировал 1,5 в качестве коэффициента масштабирования, то изображения имеют ожидаемые размеры относительно окна. Вопрос в том, как получить масштабный коэффициент системы, чтобы приложение выглядело одинаково для всех систем с различным разрешением / масштабированием? Как и Windows, приложение построено для Linux.
Буду признателен за любые советы.
Эта проблема побила и меня. Об этом также сообщается в Qt’s баг трекер Вот.
Проблема в том, что 150% масштабирования в Windows не выполняется путем масштабирования всех пикселей в 1,5 раза, а вместо этого — масштабирования шрифтов и «корректировки» пользовательского интерфейса соответственно. Вот почему интервалы и макеты выглядят очень странно, когда выбрано масштабирование 150%.
поскольку devicePixelRatio () запрашивает фактическое соотношение пикселей, и оно не изменяется при установке 150% в Windows, оно по-прежнему возвращает 1.
Если вам действительно нужно значение 1,5 для правильного масштабирования ваших растровых изображений, вы можете самостоятельно рассчитать фактический коэффициент, запросив DPI экрана (см. Документацию Вот).
Около экраны с высоким разрешениемЯ думаю, что вы должны смотреть на 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;