QList Verständnis Probleme



  • Hallo,

    warum ist das falsch?
    QList <QwtPlot> qwtList = {qwtPlot1, qwtPlot2, qwtPlot3, qwtPlot4};
    oder beseer gefragt wie kann ich eine Liste von QwtPlot Curven.
    Es handelt sich um fast 30 Kurven und ich möchte nicht für jede Kurve eine Methode erstellen.
    Danke in voraus



  • Hallo! QwtPlot ist ein QWidget ist ein QObject. QObjecte können nicht kopiert werden. Also kannst du sie auch nicht in einem Behälter speichern. Was man da üblicherweise tut ist, dass man die Objekte auf dem heap erzeugt und im Behälter Zeiger auf diese Objekte hinterlegt. Nebenbei: QList will man eigentlich nicht mehr benutzen, im Zweifel immer QVector, std::vector oder auch std::array. Also: QVector<QwtPlot*> = ....



  • Hallo,

    ich bin so vorgegangen:
    Header File:

    QVector <QwtPlot*>  qwtPlotVec;
    //GET and SET
    QwtPlot* getQwtPlotter(int iplotNumber);
    void setQwtPlotter(QVector <QwtPlot*> qwtPlotVector);
    

    cppFile:

    void setQwtPlotter(QVector <QwtPlot*> qwtPlotVector)
    {
    	qwtPlotVector[0] = new QwtPlot(ui.groupBoxPlotX11); // Warum ist das nicht richtig?
    	qwtPlotVector.append(qwtPlotVector[0]);
    	qwtPlotVector[0]->setTitle(" ");
    
    }
    danke
    


  • Beim Compilieren ist alles Okay.
    Der Compiler zeigt mir kein Fehler. Erst beim Programm starten stürze die SW genau bei diesen Zeile:

    qwtPlotVector[0] = new QwtPlot(ui.groupBoxPlotX11);
    

    ab.
    Mir ist nicht ganz klar warum, da eigentlich qwtPlotVector[0] von Typ QwtPlot*

    Ich kriege einen ASSERT Problem:

    ASSERT failure in QVector<T>::operator[]: "index out of range", file c:\qt\4.7.4\include\qtcore\../../src/corelib/tools/qvector.h, line 347
    
    


  • @Galilio said in QList Verständnis Probleme:

    qwtPlotVector[0]

    Du kannst auf das Element an der Position 0 null zugreifen, wenn es vorhanden ist. Offensichtlich übergibst du der Funktion setQwtPlotter einen leeren QVector. Ein leerer QVector hat die Länge 0.

    qwtPlotVector.size() gibt die Länge zurück.

    Du kannst stattdessen folgendes machen:

    void setQwtPlotter(QVector <QwtPlot*> qwtPlotVector)
    {
           // Erzeuge ein neues QwtPlot-Objekt und fügt einen Zeiger auf dieses Objekt an das Ende des Behälters an:
    	qwtPlotVector << new QwtPlot(ui.groupBoxPlotX11); 
    	qwtPlotVector[0]->setTitle(" "); // jetzt kann man darauf zugreifen
    
    }
    


  • @Wieland
    Danke


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.