这里要说明一下这些绘图项的类都不继承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
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 ) {