Note that there are some explanatory texts on larger screens.

plurals
  1. POSubclassing QGraphicsLayoutItem
    primarykey
    data
    text
    <p>How exactly can I subclass QGraphicsLayoutItem? I write a class that subclass QGraphicsLayoutItem and reimplement sizeHint and setGeometry but when I add my custom item to linear or grid layout. It does not shown? What is missing?</p> <p>Here is my trial.</p> <pre><code>//basicitem.h #include &lt;QGraphicsWidget&gt; #include &lt;QtCore/QRectF&gt; #include &lt;QtGui/QPainter&gt; #include &lt;QtGui/QBrush&gt; #include &lt;QtGui/QPen&gt; #include &lt;QtCore/QSizeF&gt; class BasicItem : public QGraphicsWidget { public: BasicItem(qreal x1,qreal y1,qreal x2,qreal y2); ~BasicItem(); QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); QSizeF sizeHint(Qt::SizeHint which, const QSizeF &amp;constraint = QSizeF()) const; private: qreal x1,y1,x2,y2; }; //basicitem.cpp #include "basicitem.h" #include &lt;math.h&gt; BasicItem::BasicItem(qreal x1, qreal y1, qreal x2, qreal y2) { this-&gt;x1 = x1; this-&gt;y1 = y1; this-&gt;x2 = x2; this-&gt;y2 = y2; } BasicItem::~BasicItem() { } QRectF BasicItem::boundingRect() const { return QRectF(x1,y1,abs(x2-x1),5); } void BasicItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); painter-&gt;setRenderHint(QPainter::Antialiasing); painter-&gt;setPen(QPen(QBrush(Qt::yellow),4,Qt::SolidLine,Qt::FlatCap,Qt::BevelJoin)); painter-&gt;drawLine(x1,y1,x2,y2); } QSizeF BasicItem::sizeHint(Qt::SizeHint which, const QSizeF &amp;constraint) const { Q_UNUSED(which); Q_UNUSED(constraint); return QSizeF(abs(x2-x1),5); } //compositeitem.h #include &lt;QGraphicsItemGroup&gt; #include &lt;QGraphicsLayoutItem&gt; #include &lt;QSizeF&gt; #include &lt;QList&gt; #include "basicitem.h" class CompositeItem:public QGraphicsItemGroup,public QGraphicsLayoutItem { public: CompositeItem(QList&lt;BasicItem *&gt; children); ~CompositeItem(); QSizeF sizeHint(Qt::SizeHint which, const QSizeF &amp;constraint = QSizeF()) const; void setGeometry(const QRectF &amp;rect); void updateGeometry(); }; //compositeitem.cpp #include "compositeitem.h" CompositeItem::CompositeItem(QList&lt;BasicItem *&gt; children) { BasicItem *child; foreach(child,children) { addToGroup(child); } } CompositeItem::~CompositeItem() { } QSizeF CompositeItem::sizeHint(Qt::SizeHint which, const QSizeF &amp;constraint) const { Q_UNUSED(which); Q_UNUSED(constraint); //Arbitrary values but big enough return QSizeF(300,300); } void CompositeItem::setGeometry(const QRectF &amp;rect) { Q_UNUSED(rect); QGraphicsLayoutItem::setGeometry(QRectF(0,0,300,300)); } void CompositeItem::updateGeometry() { QGraphicsLayoutItem::updateGeometry(); } //mainwindow.cpp - important parts ... QGraphicsScene *scene = new QGraphicsScene; ui-&gt;graphicsView-&gt;setScene(scene); BasicItem *basic1 = new BasicItem(10,400,110,400); BasicItem *basic2 = new BasicItem(10,400,110,500); QList&lt;BasicItem *&gt; basicItemList; basicItemList.push_back(basic1); basicItemList.push_back(basic2); CompositeItem *ci = new CompositeItem(basicItemList); QGraphicsLinearLayout *layout = new QGraphicsLinearLayout; layout-&gt;addItem(ci); QGraphicsWidget *container = new QGraphicsWidget; container-&gt;setLayout(layout); scene-&gt;addItem(container); ... </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload