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.
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.
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]; }
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden