我知道,在创建QApplication::setAttribute( Qt::AA_DisableHighDpiScaling );实例之前,可以通过调用QApplication来禁用整个应用程序的新闻部缩放。但是,是否可以将QPainter/QGraphicsScene/QGraphicsView设置为忽略DPI?
我希望我的应用程序中的所有部件都能正常运行。我只想绘制一个网格,在一个视图,没有新闻部缩放。该设置修复了网格,但它阻止了小部件的缩放。
注:我不能轻易地破坏图形项目的规模,因为我不知道确切的新闻部。在任何地方,我都无法找到一个确切解释QPainter如何绘制的值。它看起来很神奇。我也不想尝试这样做,因为可能的数字不稳定,只是附加的因素。我想暂时去除一个因素..。
发布于 2022-02-11 13:56:21
简短的回答是否定的;高dpi的处理就是全部或什么都没有。
对于你用QPainter给自己画的东西,有几个有效的解决办法。第一种是应用逆标度。在这里,我不太担心数值的不稳定性;实际上,QPainter最终在内部实现了一个统一转换。就像这样:
QPainter p(myWidget);
qreal inverseDPR = 1.0 / myWidget->devicePixelRatio();
p.scale(inverseDPR, inverseDPR);第二种方法是先呈现到QImage中,默认情况下它有DPR==1,然后将图像的DPR设置为小部件的DPR,然后再将图像绘制到小部件。这样,人们就可以避免在绘画过程中缩放图像。就像这样:
QImage img(...);
// ... paint into image
img.setDevicePixelRatio(myWidget->devicePixelRatio());
QPainter p(myWidget);
p.drawImage(... image ...);https://stackoverflow.com/questions/70818143
复制相似问题