Currently I'm working on a track-based event editor. I'm building this editor with a QGraphicsScene. I use multiple QGraphicsViews for showing tracks and midi-events. Wave files etc...
To rename a track I was trying to show a QLineEdit directly above the track-name and commit the result when editing was completed.
Adding it to the scene like this:
QLineEdit* lineEdit = new QLineEdit("My Text"); // a few connected signals for listening to editingFinished and enterPressed QGraphicsProxyWidget* proxyWidget = graphicsScene->addWidget( lineEdit )
While I was trying to delete a simple QGraphicsProxyWidget from my QGraphicsScene
it resulted in a crash. (Deleting proxyWidget also delete's it's QLineEdit child)
delete proxyWidget;
The stack-trace shows something about focus function withing Qt.
I tried several things like deleteLater. Calling clearFocus myself.
It all did not work..
The solution that worked for me is the following:
void editingFinishedHandler() { scene()->removeItem( proxyWidget ); proxyWidget->deleteLater(); } (My previous solution, that's inferior to the one above: ) [code language="cpp"] void editingFinishedHandler() { proxyWidget->setWidget(0); // < inferior solution, please see solution above proxyWidget->deleteLater(); lineEdit->deleteLater(); }