[Qt-interest] setTextInteractionFlags in QGraphicsTextItem does nothing

Darien Alonso Camacho darienad030111 at vcl.jovenclub.cu
Wed Apr 13 15:58:30 CEST 2011


Hi all.
I'm trying to wrap a QGraphicsTextItem into a class that inherits 
QGraphicsItem too, doing this way to adjust the class to the design I 
want. On the QGraphicsScene::mousePress(...) event I add the TextItem 
object and do text->setTextInteractionFlags( Qt::TextEditorInteraction 
); the text item is added to the scene well but the problem is the text 
item do not shows the cursor, just shows an empty text item.

Am I doing something wrong??
Any advice??

Best regards.

Here is part of the code:

//This is the parent for all graphics items
class GraphicItem : public QGraphicsItem
{

public:
   GraphicItem();
   //Reimplemented from QGraphicsItem
   virtual QRectF boundingRect() const {}
   virtual QPainterPath shape() const {}
   virtual void paint( QPainter* painter, const 
QStyleOptionGraphicsItem* option, QWidget* widget = 0 ) {}
   ...
};

//This is my text item class
class TextItem : public QObject, public GraphicItem
{
   Q_OBJECT

public:
   TextItem(QGraphicsItem *parent = 0, QGraphicsScene *scene = 0)
   {
       setFlag( QGraphicsItem::ItemIsMovable );
       setFlag( QGraphicsItem::ItemIsSelectable );
       setFlag( QGraphicsItem::ItemIsFocusable );
       text = new QGraphicsTextItem();
   }
   QRectF boundingRect() const
   {
       return text->boundingRect();
   }
   QPainterPath shape() const
   {
       return text->shape();
   }
   void paint( QPainter* painter, const QStyleOptionGraphicsItem* 
option, QWidget* widget = 0 )
   {
       text->paint( painter, option, widget );
   }

signals:
   void lostFocus(TextItem *item);
   void selectedChange(QGraphicsItem *item);

protected:
   QVariant itemChange(GraphicsItemChange change, const QVariant &value)
   {
       if ( change == QGraphicsItem::ItemSelectedHasChanged ){
           emit selectedChange( this );
   }

   }
   void focusOutEvent( QFocusEvent* event )
   {
       text->setTextInteractionFlags( Qt::NoTextInteraction );
            emit lostFocus( this );
   }

   void mouseDoubleClickEvent( QGraphicsSceneMouseEvent* event )
   {
       if ( text->textInteractionFlags() == Qt::NoTextInteraction )
       {
           text->setTextInteractionFlags( Qt::TextEditorInteraction );
       }
   }

private:
   QGraphicsTextItem* text;
};





More information about the Qt-interest-old mailing list