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
dynamisches Array
Re: dynamisches Array
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.
-
daniel_sudy
- Beiträge: 16
- Registriert: 5. März 2012 21:29
Re: dynamisches Array
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)
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
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*>;
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*>;
-
daniel_sudy
- Beiträge: 16
- Registriert: 5. März 2012 21:29
Re: dynamisches Array
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
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
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.
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.
Code: Alles auswählen
QVector<QVector<QLabel *> > labels;
<Irgend wie füllen>
QVector<QLabel*> &firstRow = labels[0];
firstRow.insert(0, new QLabel);* 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.