Seite 1 von 1

QTableWidget->scrollToItem ?

Verfasst: 3. März 2007 13:58
von A3D
Hallo,

in einem QTableWidget möchte ich, nach dem hinzufügen einer Zeile per Button, auch jeweils zu der entsprechenden, also letzten Zeile scrollen. Ich habe leider hier im Forum nichts darüber gefunden. Anweisungen wie:

Code: Alles auswählen

io_res_table->scrollToItem( io_res_table->item(rows, 0) , QAbstractItemView::PositionAtBottom);
bringen leider nichts. Merkwürdig finde ich jedoch, dass, wenn ich die variable rows durch rows-1 verändere, immer zur vorletzten Zeile gescrollt wird. Wieso sollte also mit rows nicht zur letzten Zeile gescrollt werden???

Ich hoffe auf eure Unterstützung.

Grüsse

Verfasst: 3. März 2007 14:20
von upsala
Eigentlich sollte rows-1 zum letzten Item scrollen, da das letzte Item die Nr. rows-1 hat...

Verfasst: 3. März 2007 15:23
von A3D
Hallo,

danke für die Aufmerksamkeit.
Ich initialisiere das QTableWidget wie folgt:

Code: Alles auswählen

rows= 0;
table_headers << tr("Bezeichnung") << tr("Menge") << tr("Einheit") << tr("Einzel") << tr("Gesamt");


io_res_table = new QTableWidget(layoutWidget); // Erzeugen der Tabelle
io_res_table->setColumnCount(5);               // Angabe der Spalten
io_res_table->setObjectName(QString::fromUtf8("io_res_table"));    // Bezeichner der Tabelle
io_res_table->setMinimumSize(QSize(314, 142)); // Zuweisen der Minimal-Breite
io_res_table->setMaximumSize(QSize(314, 142)); // Zuweisen der Maximal-Breite
io_res_table->setGridStyle(Qt::SolidLine);     // Setzen der Linienart

table_header_view_h = new QHeaderView(Qt::Horizontal, io_res_table); // Anlegen einer Tabellenkopf-Ansicht
io_res_table->setHorizontalHeaderLabels(table_headers);              // Beschriften des Tabellenkopfes
io_res_table->setHorizontalHeader(table_header_view_h);              // Zuweisen der Ansicht
table_header_view_h->setResizeMode(QHeaderView::Interactive);
   
for(int i= 0; i < 5; i++)
   table_header_view_h->resizeSection(i, colSize[i]); // Bestimmen der Spaltenbreiten

und verwende anschließend diese Methode, um Reihen in die Tabelle einzufügen:

Code: Alles auswählen

void Project::Insertion()
{
   edit[0]= io_res_term;           // Setzen eines Zeigerarrays auf Eingabefelder
   edit[1]= io_res_amount;
   edit[2]= io_res_unit;
   edit[3]= io_res_price;
   
   io_res_table->insertRow(rows);  // Einfuegen einer Reihe
   rows++;                         // Inkrementieren des Reihenzaehlers
   
   if(rows == 10 || rows == 100)   // Anpassen der 1. Spaltenbreite
      colSize[0]-= 7;               
   table_header_view_h->resizeSection(0, colSize[0]);
   
   io_res_table->scrollToItem( io_res_table->item(rows-1, 0) , QAbstractItemView::PositionAtTop);

   for(int i= 0; i < 4; i++) {      // Zuruecksetzen der Eingabefelder
      item[i]= new QTableWidgetItem(tr("%1").arg( edit[i]->text() ));
      edit[i]->setText(tr(""));
      io_res_table->setItem(rows-1, i, item[i]);
   }

}
Muss man vielleicht beim anlegen des QTableWidget's auf Eingenschaften wie Größe, Reihen- oder Spaltenanzahl achten, wenn man es automatisch scrollbar machen möchte?

Dank und Grüße

Verfasst: 18. Oktober 2007 20:24
von comer352l
Ich wärme diesen alten Thread mal wieder auf, da ich das gleiche Problem hatte...
Es handelt sich um einen Qt-Bug: http://trolltech.de/developer/task-trac ... &id=174449
In den ScrollModes QAbstractItemView::ScrollPerPixel funktionierts einwandfrei.