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(适合宽度)的视图比,就能使图片正好适合视察宽度了。
本文结束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)