我们的应用程序中有各种图像(从QLabel中的QPixmap显示),在非高DPI屏幕上以合理的大小显示,但在高DPI时会缩小。其他UI元素看起来很好。
我查看了devicePixelRatioF()函数,但它总是返回1.在我的系统上,我启用了150%缩放,所以如果我将1.5作为比例因子硬编码,那么图像具有相对于窗口。问题是,如何获得系统比例因子,以便我可以使应用程序在具有不同DPI /缩放的系统中看起来一致?与Windows一样,该应用程序也是为Linux构建的。
我很感激任何建议。
答案 0 :(得分:1)
这个问题也打败了我。在Qt的错误跟踪器 here中也会报告。
问题在于,通过将所有像素缩放1.5倍,在Windows上进行150%缩放不,而是缩放字体并调整"用户界面相应的。这就是为什么当选择150%缩放时,间距和布局看起来很奇怪。
由于 devicePixelRatio()查询实际像素比率,并且在Windows上将其设置为150%时未更改,因此它仍会返回1.
如果您确实需要1.5值来正确缩放像素图,您可以通过查询屏幕的DPI来自己计算实际因素(请查看文档here)。
答案 1 :(得分:1)
关于高DPI屏幕:我认为您应该查看QScreen::devicePixelRatio
属性,
保持屏幕与物理像素之间的比率 与设备无关的像素
和use the returned value to set the pixmap ratio与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;