前言
QMatrix 类提供了世界坐标系统的二维转换功能,可以使窗体转换变形,经常在绘图程序中使用,还可以实现坐标系统的移动、缩放、变形及旋转功能。
setScaledContents 用来设置该控件的 scaledContents 属性,确定是否根据其大小自动调节内容大小,以使内容充满整个有效区域。若设置值为 true ,则当显示图片时,控件会根据其大小对图片进行调节。该属性默认值为 false。另外,可以通过 hasScaledContents() 来获取该属性的值。
一、缩放功能
实现图形放大功能的函数如下:
void ImgProcessor::showZoomIn()
{
if(img.isNull()) //有效性判断
return;
QMatrix matrix; //声明一个 QMatrix 类的实例
matrix.scale(2, 2); //按2倍比例对水平和垂直方向进行放大,并将当前显示的图形按照该坐标矩阵进行转换
img = img.transformed(matrix);
showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
}
QMatrix & QMatrix::scale(qreal sx, qreal sy) 函数返回缩放后的 matix 对象引用,若要实现 2 倍比例缩小,则将参数 sx 和 sy 改为 0.5 即可。
scale(qreal sx, qreal sy):此函数的参数是 qreal 类型值。qreal 定义了一种 double 数据类型,该数据类型适用于所有的平台。需要注意的是,对于 ARM 体系结构的平台,qreal 是一种 float 类型。
二、旋转功能
旋转90°函数具体实现如下:
void ImgProcessor::showRotate90()
{
if(img.isNull())
return;
QMatrix matrix;
matrix.rotate(90);
img = img.transformed(matrix);
showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
}
需要注意的是,在窗口设计中,由于坐标系的 Y 轴是向下的,所以用户看到的图形是顺时针旋转 90°,而实际上是逆时针旋转 90°。
三、镜像功能
通过 QImage::mirrored(bool horizontal, bool vertical) 实现图形的镜像功能,参数 horizontal 和 vertical 分别指定了镜像的方向。
镜像函数具体实现如下:
void ImgProcessor::showMirrorVertical()
{
if(img.isNull())
return;
img = img.mirrored(false, true);
showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
}
void ImgProcessor::showMirrorHorizontal()
{
if(img.isNull())
return;
img = img.mirrored(true, false);
showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
}