shared_ptr QGraphicsPixmapItem QGraphicsScene::clear()
-
// header class MyQt : public QMainWindow { Q_OBJECT ... private slots: void on_loadImageButton_clicked() ... private: std::shared_ptr<QGraphicsScene> myScene; std::shared_ptr<QGraphicsPixmapItem> myManagedItem; } // Implementierung void MyQt::on_loadImageButton_clicked() { myScene->clear(); myManagedPixmapItem = std::shared_ptr<QGraphicsPixmapItem>(myScene->addPixmap(imagePath));Mit obenem Code habe ich leider folgendes Problem:
beim ersten Klick ist das Bild richtig dargestellt, aber beim zweiten Klick wird kein Bild zu sehen. Zum dritmal tritt ein Bebug Error aufProgram:c:\qt\5.4\msvc2013_64\bin\qt5cored.dll Module:5.4.2 File:global\qglobal.cpp Line:2876 ASSERT failture in QEvent:"Impossible, this can't happen: QEventPrivate isn't defined anywhere", file kernel\qcoreevent.cpp, lin 328
Wenn die beiden Variablen als raw pointer deklärt, dann geht es flott.
Ohne myScene->clear() funktioniert es auch.Als Newbie würde ich sehr gerne wissen, woran das Problem liegt.
-
Hallo,
beim zweiten Aufruf, wird das QGraphicsPixmapItem-Objekt vom ersten Aufruf gelöscht. Du bist aber nicht dafür verantwortlich, Qt-Objekte zu löschen.
Keine Ahnung, was das dann für Auswirkungen hat, aber scheinbar keine guten.
-
Warum geht das Löschen mit raw pointern einwandfrei?
-
Löscht du denn die raw-pointer? Also rufst du vorher delete auf?
Denke nicht, oder?
-
Du hast recht. Delete der Objekte habe ich nicht.