事件由scene传递给item
先由item的event()处理,如果在event()中 return false,交由sceneEvent()处理
如果return true则不交由sceneEvent()处理
默认情况下event()直接返回false,但是例如tab按键在sceneEvent()中不进行分发,可以在event()中处理
待继续看一下还有什么其他关系
事件由scene传递给item先由item的event()处理,如果在event()中 return false,交由sceneEvent()处理如果return true则不交由sceneEvent()处理
有geometry()。
可使用 setLayout() 和 layout()支持布局。
支持使用grabShortcut() 和insertAction() 的快捷键和QAction。
与
QGraphicsItem
不同,QGraphicsWidget不是抽象类。
2、由于QGraphicsWidget与QWi
QGraphicsItem
event
s
QGraphcisItem通过QGraphicsScene的
sceneEvent
()这个虚函数来获取事件。这个虚函数把最常见的事件分配给事件处理程序:
1.contextMenu
Event
()处理上下文菜单事件;
2.focusIn
Event
()和focusOut
Event
()处理是否聚焦的事件;
3....
QGraphicsItem
中
事件的传递顺序和通常的事件传递顺序不同
在QGraphics
中
例如mousePress
Event
的传递顺序是
view传递给scene在传递给item
在scene
中
的mousePress
Event
已经调用item->setFocus(),所以重写item
中
的
event
()并不能拦截焦点的设置,重写Scene
中
event
()才可以
在图形视图框架
中
,QGraphicsScene 提供一个快速的接口,用于管理大量 item,
QGraphicsItem
是场景
中
item 的基类。
图形视图提供了一些典型形状的标准 item,当然,我们也可以自定义 item。除此之外,
QGraphicsItem
还支持以下特性:
鼠标按下、移动、释放和双击事件,以及鼠标...
今天在测试别人遗留的bug的时候,发现一个细节,很容易忽略的问题,记录下
在对基于
QGraphicsItem
的类进行封装的时候,出现一个问题,就是拖动或者涉及到mouseMove
Event
()函数的时候,会出现位置不准确,达不到理论的移动效果,(逻辑是正确的)
是由于在重写的函数
中
添加了
QGraphicsItem
::mouseMove
Event
(
event
);这是我们的习惯导致的,
Qt的QGra...
1、QGraphicsEllipseItem是椭圆Item;
2、QGraphicsLineItem是线Item;
3、QGraphicsPathItem是路径item,是曲线、直线或者折线相连的一条线;
4、QGraphicsPixmapItem是图片Item,这个图片可以是常用的几种图片格式;
5、QGraphicsPolyg
MyGraphicsItem(
QGraphicsItem
*parent = nullptr) :
QGraphicsItem
(parent) {}
QRectF boundingRect() const override
return QRectF(0, 0, 100, 100);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
if (option->state & QStyle::State_Selected)
painter->setPen(Qt::red);
painter->setBrush(Qt::red);
painter->setPen(Qt::black);
painter->setBrush(Qt::white);
painter->drawRect(boundingRect());
class MyGraphicsView : public QGraphicsView
public:
MyGraphicsView(QWidget *parent = nullptr) : QGraphicsView(parent)
setScene(new QGraphicsScene(this));
MyGraphicsItem *item = new MyGraphicsItem;
scene()->addItem(item);
protected:
void mousePress
Event
(QMouse
Event
*
event
) override
QGraphicsView::mousePress
Event
(
event
);
QGraphicsItem
*item = scene()->itemAt(mapToScene(
event
->pos()), transform());
if (item)
item->setSelected(true);
这里重写了MyGraphicsItem的paint()函数,在选
中
时将颜色设置为红色,未选
中
时设置为白色。在MyGraphicsView
中
重写了mousePress
Event
()函数,当鼠标点击时获取当前位置的item并设置为选
中
状态。