On 08/05/15 13:44, Christian Gagneraud wrote: > Hi there, > > I am currently implementing a TextFrame QGI, that will typically look > like a sticky note. > I want the user to be able to control the size of the frame, so I > decided to implement my frame class as a direct subclass of QGI and use > composition to manage the text through a QGraphicsTextItem. > I'm doing pretty well except for one thing: since the height of the QGTI > cannot be controlled I set the ItemClipsChildrenToShape flag on my frame > class (the parent item), thinking it will hide any text of the QGTI (the > child item) that doesn't overlap the shape of my frame. > > According to the documentation this is exactly what the flag is intended > for, but nfortunaately it doesn't work in my case, whatever the shape of > my parent item, the text always renders from the top to the bottom.
So I made a couple of checks and this is what I saw from within the frame's paint function: - both items have a non empty bounding rect and shape - both items' isClipped() return false - both items' clipPath() return an empty path - both items have only the ItemIsSelectable flag set Which lead me to look for whom was trying to set some flags and bam! I spotted a setFlags(flag) where it should have been setFlag(flag). That's one small 's' for a source file and one giant bug for an app! Krys > > This is what my constructor looks like: > GraphicsTextFrameItem::GraphicsTextFrameItem(SchItem *parent): > SchItem(parent), > m_textItem(new QGraphicsTextItem(this)) > { > m_textItem->setPos(0, 0); > connect(m_textItem, &QGraphicsTextItem::linkActivated, > this, &GraphicsTextFrameItem::linkActivated); > connect(m_textItem, &QGraphicsTextItem::linkHovered, > this, &GraphicsTextFrameItem::linkHovered); > > setFlag(QGraphicsItem::ItemClipsChildrenToShape); > } > > And here is how I manage resizing: > void GraphicsTextFrameItem::itemNotification(IGraphicsObservableItem *item) > { > AbstractGraphicsHandle *handle = > dynamic_cast<AbstractGraphicsHandle*>(item); > Q_ASSERT(handle && handle->handleId() == 0); > > prepareGeometryChange(); > m_frameRect.setBottomRight(handle->pos()); > m_textItem->setTextWidth(m_frameRect.width()); > m_boundingRect = QRectF(); > update(); > } > > The graphics handle is a small item class that sends notification when > it is moved around, typically used a control point and size handler. > > It looks like I'm missing something, or maybe I just misunderstood the > documentation. Any help or point out appreciated. > > Thanks, > Chris > > _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest