Qt绘图详解 下载本文

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

这里要说明一下这些绘图项的类都不继承Qobject. 记着就点下一步完成就行了。

2、 创建好了开始写程序:

在beautyItem.h先定义Qpixmap的两个对象分别用来去访问2张图片的。 public:

BeautyItem(); QPixmap beauty0; QPixmap beauty1; };

在BeautyItem的构造函数里对QPixmap类的对象进行初始化: BeautyItem::BeautyItem():

beauty0(\), //初始化 beauty1(\) {

setPixmap(beauty0); //将对象添加进去

setPos(140,140); //设置坐标点 }

下一步 我们在

中增加BeautyItem类的数据成员这种叫组合为

了调用BeautyItem::BeautyItem();这个函数: #ifndef MYCANVAS_H #define MYCANVAS_H

#include

#include #include #include #include //要增加BeautyItem类的数据成员当然要包含头文件

class Mycanvas : public QGraphicsScene {

Q_OBJECT public:

explicit Mycanvas(QObject *parent = 0);

signals:

public slots: protected:

QGraphicsEllipseItem ellipseItem; //定义一个圆 非抽象的子类 QGraphicsTextItem TextItem;

// QGraphicsPixmapItem imageItem;

BeautyItem imageItem; //定义BeautyItem的对象这种都是组合的运用 /*

当定义BeautyItem的对象的是时候默认会调用BeautyItem的构造函数 BeautyItem::BeautyItem():

beauty0(\ //初始化 beauty1(\ {

setPixmap(beauty0); //将图片文件添加进去 setPos(140,140); //设置坐标点

}

这样应该清楚了 用派生的方法来实现 */

QPixmap beauty0; //定义QPixmap类的对象去访问图片文件 };

#endif // MYCANVAS_H 在

中:

#include \

Mycanvas::Mycanvas(QObject *parent) : QGraphicsScene(parent)

// beauty0(\ //已注释 {

//通过会图项 set xxx() 设置绘图属性

ellipseItem.setRect(50,80, 100, 80); //圆点坐标 后面两个不相等为椭圆

ellipseItem.setBrush(QBrush(Qt::green)); TextItem.setPlainText(

QString::fromLocal8Bit(\捣蛋猪\)); TextItem.setX(ellipseItem.x()+90); //显示的位置 TextItem.setY(ellipseItem.y()+90);

// imageItem.setPixmap(beauty0); //将图片文件添加进去 已注释 // imageItem.setPos(140,140); //设置坐标点 已注释 addItem(&ellipseItem); //将椭圆添加到数据结构里面去 addItem(&TextItem); //将字符串添加到数据结构里面去 addItem(&imageItem); //将图片添加到数据结构里面去 }

做了这么多工作下面看运行结果:

一样的可以打印出美丽的图片,这样改的目的是为了后面要多这个图片进行很多的操作,这样只需在处理图片BeautyItem类中改动就行了。

下面开始写点击鼠标切换图片的功能:

首先要知道这个鼠标事件我们怎么样来捕捉到它,Qt里面一般的是通过派生一个子类然后去覆写它的虚函数来实现。 下面具体看这种方法:

先要找到这个画布场景类QGraphicsScene的鼠标事件,因为我们现在是点击的是画布,

所以是找它的鼠标事件: 先选中

然后按F1进入:

点击Event事件:

再点mousePressEvent()进入:

就找到这个虚函数了,把它复制到中去: #ifndef BEAUTYITEM_H #define BEAUTYITEM_H

#include

class BeautyItem : public QGraphicsPixmapItem {

public:

/*通过派生一个子类覆写它的虚函数来捕捉它的它的事件 */

//捕捉它的鼠标事件

virtual void mousePressEvent ( QGraphicsSceneMouseEvent * mouseEvent );

BeautyItem(); QPixmap beauty0; QPixmap beauty1;

bool duity; //用来切换图片的变量 };

#endif // BEAUTYITEM_H

然后在去实现: #include \ BeautyItem::BeautyItem():

beauty0(\), //初始化 beauty1(\), duity(false) //初始值为假 {

setPixmap(beauty0); //将对象添加进去 setPos(140,140); //设置坐标点 }

//点击鼠标切换图片

void BeautyItem::mousePressEvent ( QGraphicsSceneMouseEvent * mouseEvent ) {