Изменение масштабного коэффициента Qt - PullRequest
0 голосов
/ 29 марта 2019

Я бы хотел изменить масштаб моего приложения Qt в зависимости от разрешения экрана моих устройств.Я пытаюсь определить разрешение устройства и установить

QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); // HiDPI pixmaps
qputenv("QT_SCALE_FACTOR", scaleAsQByteArray);

до инициализации моего приложения QApplication, масштабировать значение AsAsBByteArray равным 1, если оно примерно соответствует размеру моего приложения, и> 1 в зависимости от разницы междумое предполагаемое разрешение и большое разрешение дисплея текущего устройства.

Это кажется невозможным, по крайней мере из того, что я понимаю, так как вам нужна инициализированная QApplication для получения экранной информации, но я также не могу использовать qputenv после того, как это произойдет.

Есть ли у кого-нибудь решение о том, как я могу установить масштабный коэффициент QApplication в зависимости от разрешения экрана?Или, чтобы упростить задачу, как получить высоту и ширину монитора устройства перед тем, как я инициализирую окно QApplication.

Я думал об использовании Scale {} в qml: скрытие основного окна и показ уменьшенной версии.вместо этого, хотя это может иметь некоторые недостатки в производительности, но это в основном то, что я пытаюсь сделать.

1 Ответ

0 голосов
/ 29 марта 2019

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

QApplication* temp = new QApplication(argc, argv);
QRect screenGeometry = QApplication::desktop()->screenGeometry();
double width = screenGeometry.width();
// assumes that the default desktop resolution is 720p (scale of 1)
int minWidth = 1280;
delete temp;

double scale = width / minWidth;
std::string scaleAsString = std::to_string(scale);
QByteArray scaleAsQByteArray(scaleAsString.c_str(), scaleAsString.length());
qputenv("QT_SCALE_FACTOR", scaleAsQByteArray);

QApplication app(argc, argv);

Приложение, над которым я работаю, содержит массу объектов большого размера, и у меня нет времени, чтобы изменить все, чтобы использовать макеты, так что пока это отличное решение. Надеюсь, это поможет кому-то еще!

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