Nachträgliches Ändern von TreeWidgetItems führt zu Crash



  • Hi,
    hab ein paar Probleme mit folgender Zielsetzung:
    Bestimmte Variablen sollen dem User mittels einem TreeWidget präsentiert werden, dazu habe ich zunächst alle relevanten Variablen in einer Klasse (eigentlich mehr eine Struktur-> vars sind public) als QLabels gespeichert. Eine andere Klasse soll nun daraus ein TreeWidget erstellen: Hier der Code hierzu (verkürzt natürlich):

    ///Klasse Param
    
    class Param : public QWidget
    {
        Q_OBJECT
        private:
            QTreeWidget *treeWidget;
        public:
            QLabel *labelA;
            Param(){};
            Param(){};
            void ParamC();
    };
    //
    void Param::ParamC(QTreeWidget *treeWidget)
    {
       this->treeWidget=treeWidget;
       labelA = new QLabel(treeWidget);
       labelA->setText(tr("LabelA"))
    }
    
    /////Klasse Out
    class Param;
    class Out : public QWidget
    {
        Q_OBJECT
    
    private:
        Param *p;
        QTreeWidget *treeWidget;
    public:
        Out(QWidget *parent=0, int pn=2);
        void addItems(int);
        QTreeWidget* retTreeWidget();
    public slots:
            void test();
    };
    //
    Out::Out(QWidget *parent, int pn) : QWidget(parent)
    {
        treeWidget = new QTreeWidget(parent);
        treeWidget->setColumnCount(pn+1);
        p = new Param[pn];
        addItems(pn);
    }
    
    void Out::addItems( int pn)
    {
        QTreeWidgetItem *Item = new QTreeWidgetItem(treeWidget);
        Item->setText(0,tr("Outputs"));
    
        QTreeWidgetItem *Item1 = new QTreeWidgetItem(Item);
        Item1->setText(0,tr("Value"));
    
        for(int i=1;i<(pn+1);++i)
        {
            treeWidget->setItemWidget(Item1,i,p[i-1].labelA);
        }
    
    }
    
    QTreeWidget * Out::retTreeWidget()
    {
        return treeWidget;
    }
    
    void Out::test()
    {
        p[0].LabelA->setText(tr("test"));
    }
    
    ////Konstruktur des MainWindows
    
        ...
        out = new OUT(this,2);
        QDockWidget *dock = new QDockWidget(tr("Test"),this);
        dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
        dock->setWidget(out->retTreeWidget());
        addDockWidget(Qt::RightDockWidgetArea, dock)
        QTimer *t2= new QTimer(this);
        t2->singleShot(4000,apo,SLOT(test()));  //wird diese Zeile entfernt->kein   //Absturz mehr
        ...
    

    Naja, funktioniert erstmal ganz gut aus, leider nur 4000ms lang. Dh nach dem ändern des QLabels gibts den Crash. Erorrs ansonsten keine.

    So, wie lääst sich das beheben. Muss ich etwa diese misteriösen MVC-Dinger benutzen Oo?

    Danke schon mal 😉


Anmelden zum Antworten