Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QGraphicsScene clear() problems



  • I have this custom class which inherits from QGraphicsRectItem.

    [code]
    class CellGraphic : public QGraphicsRectItem
    {
    private:
    static QColor active, inactive, noConnection;

    Cell *cell;
    bool isBorderCell;
    

    // Various functions
    }[/code]

    I create a number of these on the heap and add them to a QGraphicsScene object. Every once in a while I need to dump them and create the scene from scratch, so I empty the scene by calling clear() and then create new ones which I add to the scene.

    This works as expected, but only until they've received a manual call to the update() function. Here is the paint function:
    [code]void CellGraphic::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget){

    if(cell == nullptr || isBorderCell)
        painter->fillRect(rect(), noConnection);
    else if(!cell->currentState)
        painter->fillRect(rect(), inactive);
    else
        painter->fillRect(rect(), active);
    
    painter->drawRect((rect()));
    

    }[/code]

    When I clear the scene after the object has been drawn with the last 'else' condition, the debugger immediately takes me to a heap breakpoint.

    If I'm in release mode the program works as expected, though I may be seeing a slight memory leak. It's a bit difficult to determine without more extensive testing.

    Anyway, being new at Qt and not very experienced in C++ I guess I'm just wondering what I'm doing wrong here. I was under the impression that the scene would handle the objects once added, and that clear() would delete them properly.

    edit
    Nevermind, just me being an idiot. I fixed a tricky invalid pointer problem elsewhere in the code that must have been corrupting the CellGraphic objects, because clearing the container works flawlessly now.


Log in to reply