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 auf

    Program: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.


Anmelden zum Antworten