改变Qt比例因子

时间:2019-03-28 22:35:24

标签: c++ qt qml

我想根据设备屏幕的分辨率更改Qt应用的比例。我正在尝试确定设备的分辨率并设置

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

在初始化QApplication之前,如果它在我的应用看起来不错的大小附近,则将scaleAsQByteArray设置为1,并根据我的预期分辨率和当前设备的大显示分辨率之间的差异将其设置为> 1。

至少从我的理解来看,这似乎是不可能的,因为您需要初始化的QApplication来获取屏幕信息,但是在这种情况发生后,我也无法使用qputenv。

有人对我如何基于屏幕分辨率设置QApplication的比例因子有解决方案吗?或者为了简化起见,如何在初始化QApplication窗口之前获取设备监视器的高度和宽度。

我当时正在考虑在qml中使用Scale {}:隐藏主窗口并显示缩放版本,尽管这可能会在性能上有所缺陷,但这基本上是我要尝试的方法。

1 个答案:

答案 0 :(得分:0)

我想我在这里找到了一个厚脸皮的解决方案。我最终创建了一个一次性的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);

我正在使用的应用程序具有大量硬尺寸的对象,而且我没有时间更改所有内容以使用布局,因此到目前为止,这是一个不错的解决方案。希望这对其他人有帮助!