Array aus QWidget

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
WilliamSpiderWeb
Beiträge: 14
Registriert: 2. März 2011 23:14

Array aus QWidget

Beitrag von WilliamSpiderWeb »

Hallo,

in einer selbstgebauten Klasse möchte ich mehrere QDockWidget verwalten. Daher möchte ich ein Array aus QDockWidget erstellen. Ich hab mir das folgendermaßen vorgestellt.

in Headerfile

Code: Alles auswählen

QDockWidget *m_array[];
int m_iAnzahl;

void addWidget(QDockWidget *widget);
in cpp file

Code: Alles auswählen

void CDesktopManager::addWidget(QDockWidget *widget)
{
    m_iAnzahl++;
    m_array = new QDockWidget[m_iAnzahl];
    m_array[m_iAnzahl] = Child;
}
in dem Fall bekomme ich beim Kompilieren den Fehler:
incompatible types in assignment of 'QDockWidget*' to 'QDockWidget*[0]'
Da

Code: Alles auswählen

QDockWidget *m_array[];
gleich

Code: Alles auswählen

QDockWidget **m_array;
ist,

habe ich die Funktion folgendermaßen geändert.

Code: Alles auswählen

void CDesktopManager::addWidget(QDockWidget *widget)
{
    m_iAnzahl++;
    *m_array = new QDockWidget[m_iAnzahl];
    m_array[m_iAnzahl] = Child;
}
Dann bekomme ich keinen Fehler mehr, allerdings scheinen dem Array keine Widgets hinzugefügt zu werden.

Bitte um Hilfe.
Danke
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Array aus QWidget

Beitrag von solarix »

WilliamSpiderWeb hat geschrieben:

Code: Alles auswählen

    QDockWidget **m_array; 
..
    *m_array = new QDockWidget[m_iAnzahl];
..
Das toppt sogar den Code, den ich heute von unseren Lehrlingen anschauen musste..

Aber ganz unter uns: warum nicht einfach ein QList<QDockWidget*>?
WilliamSpiderWeb
Beiträge: 14
Registriert: 2. März 2011 23:14

Beitrag von WilliamSpiderWeb »

Sorry, aber ich wusste nicht, dass man nur Fragen stellen darf,
wenn mann alles richtig macht.

Aber immerhin wird dem Hohn und Spott noch ein hilfreicher Hinweis beigefügt.

Werde QList ausprobieren.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Es geht nicht darum, dass du alles richtig machen sollst. Das Problem ist, dass du einfach wild versuchst, eine Lösung zu erkämpfen, ohne dass du eigentlich weißt was da genau passiert.
Google nach "C++ Array aus Zeigern" hätte dich schon einen entscheidenden Schritt weiter gebracht.
In deinem C++-Buch sollte auch erklärt worden sein, dass man in C++ solche unschönen "rohen" Konstrukte in Klassen kapselt. Das sollte dann entweder an einem String oder einer Array/List-Klasse demonstriert worden sein - und danach wurden sicher die C++-Klassen für Array-Abstraktion (std::vector, std::list, std::queue, ...) vorgestellt.

Ich stell mir aber jetzt die große Frage:
WARUM willst du QDockWidgets selber speichern? QDockWidgets machen nur Sinn in einem QMainWindow. Dieses verwaltet seine DockWidgets aber selber! Also kein Grund, die nochmal selber anonym (!) - also ohne Möglichkeit eines direkten Zugriffs ohne Umwege ala objectName(), findChild(), etc - in einem Array zu speichern.
Antworten