Seite 1 von 1

dynamisches Array

Verfasst: 13. April 2012 10:06
von daniel_sudy
Hallo, ich habe gerade ein grundlegendes Problem und komme einfach nicht auf dei Lösung:
Ich will im Header File ein QLabel Array anlegen und es dann im Cpp zur Laufzeit erzeugen.
Header-File:
QLabel *test;

Cpp-File:
test=new QLabel[size]

irgendwie klappt das nicht wirklich! Der Compiler nimmt ers zwar, aber wenn ich dann
mit test->setText() darauf zugreifen will, gibt es eine Fehlermeldung!
Lg Daniel

Re: dynamisches Array

Verfasst: 13. April 2012 10:25
von franzf
mit test->setText() darauf zugreifen will, gibt es eine Fehlermeldung!

Und die wäre nicht schelcht! Poste die doch bitte in Zukunft immer gleich mit.

Ansonsten:
dynamisches Array + C++ = std::vector bzw. mit Qt QVector.
Lies zum QVector mal die Doku.

Re: dynamisches Array

Verfasst: 13. April 2012 10:37
von daniel_sudy
Ok, ja ich habe vorher im Header File mir das Array so erzeugt:
QLabel *firstRow[15]
und anschließend im Cpp -File eine Schleife mit:
for(int i=0;i<matrixRows_;++i)
{
firstRow= new QLabel;
firstRow->setText("Bla");
}

das hat auch soweit funktioniert, eh klar. Nun will ich aber die Größe des Array dynamisch im C++ zuweisen, und dies habe ich folgendermaßen versucht!
Im Header:
QLabel *firstRow

Im Cpp File:

firstRow = new QLabel[Rows];

for(int i=0;i<matrixRows_;++i)
{
firstRow= new QLabel;
firstRow->setText("Bla");
}

aber da sagt mir der Compiler:
Fehler 6 error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'QLabel *' akzeptiert (oder keine geeignete Konvertierung möglich)

Re: dynamisches Array

Verfasst: 13. April 2012 10:50
von franzf
QLabel* firstrOW[15] ist ja ein Array aus Zeigern auf QLabel.
QLabel* firstRow ist ein Zeiger auf ein QLabel.
firstRow = new QLabel[15]; erzeugt jetzt ein Array aus QLabel-Objekten, nicht Zeigern!
Äquivalent wäre
QLabel** firstRow. Aber das wird extrem unhandlich.
Verwende doch
QVector<QLabel*>;

Re: dynamisches Array

Verfasst: 13. April 2012 12:46
von daniel_sudy
Hy, ich habe es nun mit QVector versucht, und stehe nun vor dem Problem das ich einen
QVector<QVector<QLabel>>label benötige.
Einen normalen Vector spreche ich dann mit label.insert(0,new QLabel) an, aber wie spreche ich nun diesen Doppelvektor an, um ihm Daten
an die richtige Stelle zu setzen?
Lg

Re: dynamisches Array

Verfasst: 13. April 2012 16:30
von franzf
Ein QVector<QVector<QLabel * > > (wichtig: QLabels sind nicht kopierbar, ein QVector zieht aber Kopien! Auch das Leerzeichen zwischen den > > beachten - vergisst du das, denkt der Compiler, das ist der operator>>) ist auch nur ein Vector, der Vectoren aufnimmt.

Code: Alles auswählen

QVector<QVector<QLabel *> > labels;
<Irgend wie füllen>
QVector<QLabel*> &firstRow = labels[0];
firstRow.insert(0, new QLabel);
Zwei Dinge musst du beachten:
* Hol dir immer Referenzen, wenn du den entsprechenden QVector<QLabel*> veränderst (neue Labels hinzufügen etc.)
* Pass BITTE auf, dass deine Elemente auch existieren - ist aber bei blanken QLabel **(*) auch nicht anders.