在
QGraphicsView
视图下,对item的鼠标左键的拖动事件由函数mouseMoveEvent()接收。实现拖动功能需要设置item为"可选中"和"可拖动,该设置通过函数setFlags()实现。
-
virtual void
QGraphicsItem
::
mouseMoveEvent
(QGraphicsSceneMouseEvent * event)
-
void
QGraphicsItem
::
setFlags
(GraphicsItemFlags flags)
-
鼠标移动(拖动)事件
。重新实现该函数即可接收到鼠标的item拖动事件。通过函数event->pos()获得鼠标在item中的当前坐标。
-
设置标记
。枚举类型
GraphicsItemFlags
包含了一些可设置的item功能标记,这些功能可叠加设置。见下表
项
|
说明
|
QGraphicsItem::ItemIsSelectable
|
可选中
|
QGraphicsItem::ItemIsMovable
|
可移动
|
QGraphicsItem::ItemIsFocusable
|
可获得焦点
|
//设置item可选中且可移动
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
void mouseMoveEvent(QGraphicsSceneMouseEvent * event){
cout << "mouseMoveEvent - "
<< (float)(event->pos().x()) << ","
<< (float)(event->pos().y()) << endl;
QGraphicsItem::mouseMoveEvent(event);
QT
GraphicsView框架的应用,对自定义Rect
Item
通过控制点Agent
Item
调整尺寸,
Item
成组,解组的具体用法,给学习
Qt
组态软件编写提供很大帮助。
程序需要
Qt
4.7.4支持,Vs2008环境。
Qt
中提供的
Item
未必能够满足需要,因此有必要实现自定义的
QGraphicsItem
对象。与QPushButton一样,如果发生鼠标
事件
,那么为了更换被点击按钮的图像,可以使用paint实现用户自定义
QGraphicsItem
。
2.一个简单的实验
#include
#include "My
Item
.h"
#include
#include
#define W
QGraphicsItem
s收不到消息分有好几种情况。除了错误的代码外,还有一些对
Qt
原理理解上的问题(
Qt
埋下的坑)。
情况 (1)如果是mouseMoveEvent收不到消息,而mousePressEvent能收到消息,则往往在mousePressEvent中不能把消息传递给父类。例如
void QGraphicsEllipseSub
Item
::mousePressEvent(QGraphicsSceneMouseEvent *event){
qDebug() << "elli
Qt
提供了
QGraphicsItem
类来创建可在 QGraphicsScene 中显示的图形项。要使图形项可以被
拖动
,可以使用 setFlag(
QGraphicsItem
::
Item
IsMovable) 方法;要使图形项可以被缩放,可以使用 setFlag(
QGraphicsItem
::
Item
IsScaleable) 方法;要使图形项可以被旋转,可以使用 setFlag(QGraphics...
功能需求,在
QGraphicsView
中显示一张图像,如下图,鼠标点击图片时返回图片坐标系内的像素坐标,但是点击边上空白部分时不返回坐标。
实现思路是子类化
QGraphicsView
,QGraphicsScene, QGraphicsPixmap
Item
,并重写鼠标点击
事件
函数mousePressEvent(QGraphicsSceneMouseEvent* event)。光标默认的样式是手型