QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果 |
您所在的位置:网站首页 › 桌面鼠标拖动文件变成复制是怎么回事 › QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果 |
大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。 应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏,主机是mini2440,分辨率是800*480,程序写比較粗糙,但对刚開始学习的人还是有一点启示,大家一起进步。 qt中提供了QGphicsView,QGraphicsScene,QGraphicsItem,QGraphicsPixmapItem是QGraphicsItem的子类 分辨创建它们的实例:view,scene,item,然后通过各自的方法scene->addItem(item);view->setScene(scene);就能够达到类似下图的效果,想要进一步定制,则要继承QGraphicsItem或QGraphicsPixmapItem,然后重写paint()、boundingRect()等方法,此外假设还想要获取鼠标事件,重写mousePressEvent等事件就好了,注意,一旦重写了mousePressEvent方法,就以为了qt不会再自己主动处理item的不论什么press事件了,能够在你重写的mousePressEvent方法中最后加入�QGraphicsItem::mousePressEvent(event);解决问题,就是说你获取到了鼠标事件,可是依旧让qt处理这个鼠标事件。 程序中的item能够水平拖动,拖动的同一时候图标大小会渐变,中间最大,两边渐小。 图1 图2 图3 以下是源程序文件夹结构: mainwindow.h与main.cpp是qt自己主动产生的代码,我没有产生窗体ui myscene.h与某与scene.cpp是定义了类MyScene,继承自QGraphicsScene,我的目的是要获取其鼠标事件 nodeui.h与nodeui.cpp是定义了类NodeUI,继承自QGraphicsPixmapItem,目的相当多。 以下详细的源文件:myscene.h与myscene.cpp相对简单,就实现了一个功能 myscene.h #ifndef MYSCENE_H #define MYSCENE_H #include class MyScene : public QGraphicsScene { Q_OBJECT public: explicit MyScene(QObject *parent = 0); private: void mouseMoveEvent(QGraphicsSceneMouseEvent *event); void mousePressEvent(QGraphicsSceneMouseEvent *event); void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); signals: void isMoving(QPointF &pos); public slots: private: QPointF beforePos; QPointF releasePos; }; #endif // MYSCENE_Hmyscene.cpp #include "myscene.h" #include #include #include MyScene::MyScene(QObject *parent) : QGraphicsScene(parent) { } void MyScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { //QPointF pos = event->scenePos(); QPointF pos(event->scenePos().x()-beforePos.x(),event->scenePos().y()-beforePos.y()); emit isMoving(pos); //qDebug() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |