Qt 2D绘图 下载本文

内容发布更新时间 : 2024/12/26 2:51:26星期一 下面是文章的全部内容请认真阅读。

我们可以自己改变当前点的位置。 void Dialog::paintEvent(QPaintEvent *) {

QPainterPath path; path.addRect(50,50,40,40); path.moveTo(100,100); path.lineTo(200,200); QPainter painter(this); painter.drawPath(path); }

效果如下图。可见moveTo函数可以改变当前点的位置。

这里我们只讲解了绘制路径类最简单的应用,其实这个类很有用,利用它可以设计出很多特效。有兴趣的朋友可以查看一下它的帮助。因为我们这里只是简介,所以不再深入研究。

Qt 2D绘图(五)显示图片

现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲。这里我们是利用QPixmap类来实现图片显示的。 一、利用QPixmap显示图片。

1.将以前的工程文件夹进行复制备份,我们这里将工程文件夹改名为painter05。(以前已经说过,经常备份工程目录,是个很好的习惯) 2.在工程文件夹的debug文件夹中新建文件夹,我这里命名为images,用来存放要用的图片。我这里放了一张linux.jpg的图片。如下图所示。

3.在Qt Creator中打开工程。(即打开工程文件夹中的.pro文件),如图。

4.将dialog.cpp文件中的paintEvent()函数更改如下。 void Dialog::paintEvent(QPaintEvent *) {

QPainter painter(this); QPixmap pix;

pix.load(“images/linux.jpg”);

painter.drawPixmap(0,0,100,100,pix); }

这里新建QPixmap类对象,并为其添加图片,然后在以(0,0)点开始的宽和高都为100的矩形中显示该图片。你可以改变矩形的大小,看一下效果啊。最终程序运行效果如下。

(说明:下面的操作都会和坐标有关,这里请先进行操作,我们在下一节将会讲解坐标系统。)

二、利用更改坐标原点实现平移。

Qpainter类中的translate()函数实现坐标原点的改变,改变原点后,此点将会成为新的原点(0,0); 例如:

void Dialog::paintEvent(QPaintEvent *) {

QPainter painter(this); QPixmap pix;

pix.load(“images/linux.jpg”);

painter.drawPixmap(0,0,100,100,pix);

painter.translate(100,100); //将(100,100)设为坐标原点 painter.drawPixmap(0,0,100,100,pix); }

这里将(100,100)设置为了新的坐标原点,所以下面在(0,0)点贴图,就相当于在以前的(100,100)点贴图。效果如下。

三、实现图片的缩放。

我们可以使用QPixmap类中的scaled()函数来实现图片的放大和缩小。 例如:

void Dialog::paintEvent(QPaintEvent *) {

QPainter painter(this);

QPixmap pix;

pix.load(“images/linux.jpg”);

painter.drawPixmap(0,0,100,100,pix);

qreal width = pix.width(); //获得以前图片的宽和高 qreal height = pix.height();

pix = pix.scaled(width*2,height*2,Qt::KeepAspectRatio);

//将图片的宽和高都扩大两倍,并且在给定的矩形内保持宽高的比值 painter.drawPixmap(100,100,pix); }

其中参数Qt::KeepAspectRatio,是图片缩放的方式。我们可以查看其帮助。将鼠标指针放到该代码上,当出现F1提示时,按下F1键,这时就可以查看其帮助了。当然我们也可以直接在帮助里查找该代码。

这是个枚举变量,这里有三个值,只看其图片就可大致明白,

Qt::IgnoreAspectRatio是不保持图片的长宽比,Qt::KeepAspectRatio是在给定的矩形中保持长宽比,最后一个也是保持长宽比,但可能超出给定的矩形。这里给定的矩形是由我们显示图片时给定的参数决定的,例如

painter.drawPixmap(0,0,100,100,pix);就是在以(0,0)点为起始点的宽和高都是100的矩形中。 程序运行效果如下。