Seite 1 von 1

Unverständnis QTableWidget

Verfasst: 1. Februar 2009 10:18
von plip
Kann mir jemand erklären warum dies:

Code: Alles auswählen

for(int i = 0; i < table->columnCount(); i++)
  {
    for(int j = 0; j < table->rowCount(); j++)
    {
      QString s = "Z: "+QString::number(j+1, 10)+" "+"S: "+QString::number(i+1, 10);
      QTableWidgetItem* it = new QTableWidgetItem(s);
      table->setItem(j+1, i+1, it);
    }
  }
zu folgender Ausgabe führt:

Verfasst: 1. Februar 2009 16:42
von solarix
evt hängts ja damit zusammen, dass du über die Tabelle hinausschreibst?

Code: Alles auswählen

for(... ; j < table->rowCount();... )
{
    ...
      table->setItem(j+1, i+1, it); 

Verfasst: 1. Februar 2009 18:41
von plip
Ich finde es zwar in der Doku nirgendwo, aber ich bin der Meinung, dass die Indizierung von Zeilen und Spalten bei 1 beginnt.
Wenn ich

Code: Alles auswählen

setItem(j, i, it);
schreibe, gibts nen segmentation fault.

Verfasst: 1. Februar 2009 18:48
von upsala
Wie kommst du darauf, daß die Zählung bei 1 beginnen sollte? Wann fängt bei C++ überhaupt mal eine Zählung bei 1 an? Ansonsten gibts ja noch die Doku

Verfasst: 1. Februar 2009 18:49
von solarix
mir ist nichts.. aber auch wirklich gar nichts bekannt, was bei Qt einen Startindex von 1 hat...

Ich bin mir sicher, dass

Code: Alles auswählen

int main(int argc, char *argv[])
{
  QApplication app(argc,argv);
  
  QTableWidget w(19,1);
  
  for (int r=0; r<w.rowCount(); r++)
    for (int c =0; c<w.columnCount(); c++)
    {
      QString s = "Z: "+QString::number(r+1, 10)+" "+"S: "+QString::number(c+1, 10);
      QTableWidgetItem* it = new QTableWidgetItem(s);
      w.setItem(r,c, it); 
    }
  w.show();
  return app.exec();
}
auch bei dir funktioniert...