// QT 4.8
我已经实现了一个可调整大小的 QGraphicsItem,它工作得很好。
但是,现在,我需要在这个可调整大小的项目中包含子项目。子项的大小/位置显然取决于父项。我的问题是在调整父母的大小时通知孩子。但是到目前为止,父级本身并没有检测到自己的大小变化(而在现场,一切都按预期运行!)
在我试图覆盖的父项目(=可调整大小的项目)项目中
QVariant itemChange(QGraphicsItemChange, QVariant)
为了转储更改事件。我可以看到所有事件,但是当项目(正在)调整大小时,itemChange 方法永远不会被调用。
非常感谢任何帮助。
注意:
在我可调整大小的 QGraphicsItem 构造函数中,我启用了标志 QGraphicsItem::ItemSendGeometryChange
ResizableGraphicsItem::ResizableGraphicsItem(QGraphicsItem *p_parent, qreal p_initialWidth, qreal p_initialHeight) : QGraphicsItem(p_parent), _width(p_initialWidth), _height(p_initialHeight), _resized(true) { setFlag(ItemSendsGeometryChanges); ... }
调整大小方法如下所示:
void ResizableGraphicsItem::setSize(qreal p_width, qreal p_height) { prepareGeometryChange(); if ((_width != p_width) || (_height != p_height)) { _width = p_width; _height = p_height; _resized = true; } }
和:
QRectF ResizableGraphicsItem::boundingRect() const { return QRectF(0, 0, _width, _height); }