default user Geschrieben 26. Dezember 2009 Geschrieben 26. Dezember 2009 Hallo, Ich benötige für ein Tabellenprogramm mehrere QTableWidgetItems in einem 2-Dimensionalen Array, wobei die erste Dimension nicht festgelegt ist. Ich habe dazu in der Header-Datei folgendes deklariert: QTableWidgetItem *items[][5]; Später werden die benötigten items in zwei for-Schleifen erzeugt und dem TableWidget zugeordnet: items[i1][i2] = new QTableWidgetItem; TableWidget1->setItem( i2, i1, items[i1][i2] ); Leider erhalte ich dabei immer einen Speicherzugriffsfehler beim Starten unter Linux. Wenn ich in der Header-Datei die größe des Arrays festlege, funktioniert es, nur ist das natürlich nicht Sinn der Sache. Hier der Quellcode, das Relevante spielt sich in MainWindow.cpp und MainWindow.h ab. main.cpp MainWindow.h MainWindow.cpp FindDialog.h FindDialog.cpp Wahrscheinlich gibt es ein Problem mit dieser Funktion: void MainWindow::createTable(){ int i1, i2; twidget1 = new QTableWidget( 5, 5, this ); QStringList horizontal; horizontal << "A" << "B" << "C" << "D" << "E"; twidget1->setHorizontalHeaderLabels( horizontal ); twidget1->setSortingEnabled( TRUE ); for( i1=0; i1<=4; i1++ ){ for( i2=0; i2<=4; i2++ ){ items[i1][i2] = new QTableWidgetItem; items[i1][i2]->setText( "foo" ); twidget1->setItem( i2, i1, items[i1][i2] ); } } this->setCentralWidget( twidget1 ); } Danke im Voraus. Zitieren
Klotzkopp Geschrieben 26. Dezember 2009 Geschrieben 26. Dezember 2009 QTableWidgetItem *items[][5];Laut Standard ist das ein unvollständiger Typ. Viele Compiler bieten allerdings eine Erweiterung, die diese Deklaration als Array der Größe 0 interpretieren, wenn es Member eine Klasse oder Struktur ist. Das sollte aber eigentlich nur dann funktionieren, wenn dieses Array der letzte Member ist. Wie auch immer, diese Deklaration bedeutet nicht, dass du hier ein dynamisches Array hast, das sich bei Bedarf selbst anlegt oder gar automatisch vergrößert. Das musst du entweder von Hand machen, oder einen geeigneten Container benutzen. Zitieren
default user Geschrieben 27. Dezember 2009 Autor Geschrieben 27. Dezember 2009 Achso, ich hatte das von den Funktionsparametern übernommen, dort kann man einfach etwas wie array[][5] als Parameter nehmen. Da es der Compiler akzeptierte, ging ich davon aus, das könnte man als Member so wie beim Parameter nutzen. Danke, ich habs umgeschrieben und jetzt geht's: (Als Beispiels ein 5x5-Array) /* MainWindow.h */ QTableWidgetItem ***items; /* MainWindow.cpp */ items = new QTableWidgetItem**[5]; for( i1=0; i1<=4; i1++ ){ items[i1] = new QTableWidgetItem*[5]; } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.