PDA

View Full Version : Subclassing QGraphicsTextItem and QGraphicsLayoutItem



psih128
15th October 2008, 14:30
Hi

I'm trying to subclass these 2 classes in order to get an editable text element which I can lay out on QGraphicsWidget. The code for the resulting class is shown below. The problem is that when I add my subclass instance to any QGraphicsLayout - it just crashes. The stack trace indicates a problem in the QGraphicsItem::setParent() function.

I created a similar subclass from QAbstractGraphicsShapeItem and QGraphicsLayoutItem, and it works fine - no crashing.




class TextEdit : public QGraphicsTextItem, public QGraphicsLayoutItem {
Q_OBJECT
public:
enum { Type = UserType + 2 };

TextEdit(const QString &text = QString(), QGraphicsItem *parent = 0);
~TextEdit();

int type() const { return Type; }

QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
void setGeometry(const QRectF &rect);
};




#include "rTextEdit.h"


#include <QtGui>


TextEdit::TextEdit(const QString &text, QGraphicsItem *parent)
: QGraphicsTextItem(text, parent), QGraphicsLayoutItem(0, false)
{

}

TextEdit::~TextEdit()
{
}
QSizeF TextEdit::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
{
switch (which) {
case Qt::MinimumSize:
return QSizeF(0, 0);
case Qt::PreferredSize:
return document()->size();
case Qt::MaximumSize:
return QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
default:
qWarning("r::TextEdit::sizeHint(): Don't know how to handle the value of 'which'");
break;
}
return constraint;
}

void TextEdit::setGeometry(const QRectF &rect)
{
setTextWidth(rect.width());
setPos(rect.topLeft());
}

psih128
15th October 2008, 17:28
Ok Trolltech confirmed that this seems to be a bug. A task has been opened: ID 228878

patrik08
15th October 2008, 20:12
you can draw && edit text image on top QGraphicsRectItem.
It run....

QGraphicsRectItem can resize rotate any direction ....



class TextMount; /* virtual QTextControl like QTextEdit */
class TextLayer : public QObject, public QGraphicsRectItem


http://code.google.com/p/fop-miniscribus/
or
http://fop-miniscribus.googlecode.com/svn/trunk/QTextPanel/

or like paper print on QAbstractScrollArea
http://fop-miniscribus.googlecode.com/svn/trunk/doc/draw_paper.1/

or try QGraphicsSimpleTextItem if only words