wieso erzeugt QTableWidget::setItem() einen Error?

Alles rund um die Programmierung mit Qt
Antworten
phy51km4n

wieso erzeugt QTableWidget::setItem() einen Error?

Beitrag von phy51km4n »

Also ich hab hier ein Projekt, in dem ich eine Tabelle erstellen will und die Klasse QTableWidget in der Klasse Spreadsheet subclasse.
Jedoch tritt da bei mir ein Error auf. Im Konstruktor rufe ich folgende Anweisungen auf:

Code: Alles auswählen

const int ColumnCount = 10;

Spreadsheet::Spreadsheet(QWidget *parent) : QTableWidget(parent)
{
    setRowCount(0);   
    setRowCount(1);
    
    setColumnCount(0);
    setColumnCount(ColumnCount);
    
    for(int i=0; i < ColumnCount; ++i)
	{
        QTableWidgetItem *item = new QTableWidgetItem;
		if(i==2 || i==3 || i==5 || i==6 || i==8 || i==9)
			item->setText("0");
		else 
			item->setText(" ");

		setItem(0, i, item);
	}
Zur Fehlerfindug habe ich eine Funktion allesOk() erstellt, die nur eine QMessageBox mit dem Text "Bis jetzt ist alles OK" aufruft.
Diese Funktion habe ich dann einmal vor das setItem() und ein anderes Mal nach setItem() gesetzt.
Als ich es vor setItem() setzte, kam zuerst die MessageBox und dann die Fehlermeldung, als ich es nach setItem() setzte wurde die MessageBox nicht mehr aufgerufen, das heißt, der Fehler muss an der Funktion setItem() liegen.

Als ich dann in die Dokumentation geguckt habe bei QTableWidget und QTableWidgetItem konnte ich jedoch keinen Fehler an meinem Code erkennen, da die Erstellung und das Setzen von Items dort genauso beschrieben wird.

( C:\>qmake -v
QMake version 2.01a
Using Qt version 4.2.3 in C:\Qt\4.2.3\lib )

Was habe ich also übersehen?
Zandru
Beiträge: 84
Registriert: 29. Mai 2007 15:35

Beitrag von Zandru »

hier wäre es hilfreich die Fehlermeldung zu kennen!

Dein Code funzt bei mir ohne Fehler.

Ich vermute der Fehler liegt ganz woanders und wird nur hier als Folgefehler sichtbar.
phy51km4n

Beitrag von phy51km4n »

es war in der Tat ein Folgefehler, das Problem war, dass ich eine andere Funktion connectet habe, die auf Elemente in der Tabelle zugreift, bevor
ich die Tabelle überhaupt erstellt habe.
phy51km4n

Beitrag von phy51km4n »

Aber dafür hab ich dasselbe Problem an einer anderen Stelle!

Ich hab nämlich eine Funktion addRow(), die eine Reihe hinzufügen soll, und in ihr eine for-Schleife, um die einzelnen Items für die neue Reihe, die 10 Spalten haben soll, zu setzen:

Code: Alles auswählen

const int ColumnCount = 10;

for(int i=0; i < ColumnCount; ++i)
	{
        QTableWidgetItem *item = new QTableWidgetItem;
		if(i==2 || i==3 || i==5 || i==6 || i==8 || i==9)
			item->setText("0");	
		else 
			item->setText(" ");
        //allesOk();	
		setItem(curRow, i, item);
	}
Wie vorhin funzt alles bis zum setItem() tadellos.
Als ich das Programm mal unter Linux laufen ließ, stand da im Terminal als Fehlermeldung "Speicherzugriffsfehler" und der entsprechende Fehlercode via "echo $?" war 139.

Also, Rat gesucht...
May-C
Beiträge: 20
Registriert: 28. März 2007 20:37

Beitrag von May-C »

Ich habe eigentlich nur einen Rat. Lernen mit dem Debugger umzugehen.
Antworten