Solved 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 einQWidget
ist einQObject
. 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 immerQVector
,std::vector
oder auchstd::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