Qt开发高级进阶:如何在显示时适合视窗宽度和高度(fitWidth+fitHeight)

网友投稿 790 2022-10-12 17:30:44

Qt开发高级进阶:如何在显示时适合视窗宽度和高度(fitWidth+fitHeight)

Qt调整图片的显示高宽做得十分人性化,只需要在scene和view中支持鼠标滚动轮即可。不过有时候有一些特殊的要求,比如,如何在视窗内实现适合视察的宽度和高度。

注意:这里是指调整图片的显示大小,例如一张800x600的图片,图片大小是不变的,只是显示成任意大小,Qt提供了一个函数scale,同时,配套使用的是transform,算法的基本原理是这样的,

class GraphViewer : public QGraphicsView{....}int GraphViewer::fitWidth(){ QTransform tf = transform(); qreal rx = tf.m11(); // this is X scale //qreal ry = tf.m22(); int vw = rect().width(); int sw = scene()->sceneRect().width(); qreal rw = (qreal)vw/sw; if( (0==rx) || (abs(rw-rx)< 0.000001) ) { return 0; } qreal ratio = rw /rx; scale(ratio, ratio); return 0;}

这里,scale中的两人个参数表示x, y 轴的显示比例,transform中的m11, m22则分别对应这两个比例。

这里特别注意的是,

qreal ratio = rw /rx;

如果我们使用

qreal ratio = rw;

那么在rw不为1.0的情况下,多执行几次fitWidth,图片会越来越小,或越来越大;因为scale是累积相乘。所以正确的做法是,前一次的视图比例乘 1/rx 后,相当于该维度上scale会被置为1.0,然后,再乘以我们想要的rw(适合宽度)的视图比,就能使图片正好适合视察宽度了。

本文结束。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一个天气查询服务:爬取数据、Web服务、小程序展示
下一篇:7 张图轻松理解 K8S 集群内服务通信
相关文章