QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

您所在的位置:网站首页 桌面鼠标拖动文件变成复制是怎么回事 QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

2023-06-16 05:02| 来源: 网络整理| 查看: 265

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

应大家的要求,还是把完整的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_H

myscene.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