>
在成员中定义:
protected:
QGraphicsEllipseItemellipseItem;//定义一个圆非抽象的子类
QGraphicsTextItemTextItem;
QGraphicsPixmapItemimageItem;
QPixmapbeauty0;//定义QPixmap类的对象去访问图片文件
};
3、根据上面所说的在.h文件定义的对象就要拿到.cpp里去实现
在
mycanvas.cpp里面:
#include"mycanvas.h"
Mycanvas:
:
Mycanvas(QObject*parent):
QGraphicsScene(parent),
beauty0(":
/image/tu1.jpg")//把路径写上注意此处‘:
’千万不能少新增加的
{
//通过会图项setxxx()设置绘图属性
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(120,120);//设置坐标点新增加的
addItem(&ellipseItem);//将椭圆添加到数据结构里面去
addItem(&TextItem);//将字符串添加到数据结构里面去
addItem(&imageItem);//将图片添加到数据结构里面去新增加的
}
4、编译看效果:
此时美丽的兽兽展现我们面前。
在画布上先也就这么简单。
接下来要在这个的基础上继续完成一些功能。
一、实现点下鼠标完成换图片的功能
1、先将程序改装一下,把处理图片对象单独放在一个类中,因为后面要对图片进行很多操作。
如定义类名为BeautyItem它继承自QGraphicsPixmapItem类。
示意图为:
有了它就好办了,
添加类:
这里要说明一下这些绘图项的类都不继承Qobject.
记着就点下一步完成就行了。
2、创建好了开始写程序:
在beautyItem.h先定义Qpixmap的两个对象分别用来去访问2张图片的。
public:
BeautyItem();
QPixmapbeauty0;
QPixmapbeauty1;
};
在BeautyItem的构造函数里对QPixmap类的对象进行初始化:
BeautyItem:
:
BeautyItem():
beauty0(":
/image/tu1.jpg"),//初始化
beauty1(":
/image/tu2.jpg")
{
setPixmap(beauty0);//将对象添加进去
setPos(140,140);//设置坐标点
}
下一步我们在
中增加BeautyItem类的数据成员这种叫组合为了调用BeautyItem:
:
BeautyItem();这个函数:
#ifndefMYCANVAS_H
#defineMYCANVAS_H
#include
#include
#include
#include
#include//要增加BeautyItem类的数据成员当然要包含头文件
classMycanvas:
publicQGraphicsScene
{
Q_OBJECT
public:
explicitMycanvas(QObject*parent=0);
signals:
publicslots:
protected:
QGraphicsEllipseItemellipseItem;//定义一个圆非抽象的子类
QGraphicsTextItemTextItem;
//QGraphicsPixmapItemimageItem;
BeautyItemimageItem;//定义BeautyItem的对象这种都是组合的运用
/*
当定义BeautyItem的对象的是时候默认会调用BeautyItem的构造函数
BeautyItem:
:
BeautyItem():
beauty0(":
/image/tu1.jpg"),//初始化
beauty1(":
/image/tu2.jpg")
{
setPixmap(beauty0);//将图片文件添加进去
setPos(140,140);//设置坐标点
}
这样应该清楚了用派生的方法来实现
*/
QPixmapbeauty0;//定义QPixmap类的对象去访问图片文件
};
#endif//MYCANVAS_H
在
中:
#include"mycanvas.h"
Mycanvas:
:
Mycanvas(QObject*parent):
QGraphicsScene(parent)
//beauty0(":
/image/tu1.jpg")//已注释
{
//通过会图项setxxx()设置绘图属性
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()进入:
就找到这个虚函数了,把它复制到
中去:
#ifndefBEAUTYITEM_H
#defineBEAUTYITEM_H
#include
classBeautyItem:
publicQGraphicsPixmapItem
{
public:
/*通过派生一个子类覆写它的虚函数来捕捉它的它的事件
*/
//捕捉它的鼠标事件
virtualvoidmousePressEvent(QGraphicsSceneMouseEvent*mouseEvent);
BeautyItem();
QPixmapbeauty0;
QPixmapbeauty1;
boolduity;//用来切换图片的变量
};
#endif//BEAUTYITEM_H
然后在
去实现:
#include"beautyitem.h"
BeautyItem:
:
BeautyItem():
beauty0(":
/image/tu1.jpg"),//初始化
beauty1(":
/image/tu2.jpg"),
duity(false)//初始值为假
{
setPixmap(beauty0);//将对象添加进去
setPos(140,140);//设置坐标点
}
//点击鼠标切换图片
voidBeautyItem:
:
mousePressEvent(QGraphicsSceneMouseEvent*mouseEvent)
{
duity=!
duity;
setPixmap((duity?
beauty0:
beauty1));
setPos(140,140);//设置坐标点
}
只需改动一点点就行了,加了一个鼠标事件函数,和一个bool变量用来切换图片。
编译看运行结果:
点击鼠标,注意要点在图片内:
这样就实现了切换,看着是否很简单,真正能够理解才行。
持续更新。
。
。
。
。
。