QTableWidget->scrollToItem ?

Alles rund um die Programmierung mit Qt
Antworten
A3D
Beiträge: 2
Registriert: 21. Februar 2007 23:20

QTableWidget->scrollToItem ?

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Eigentlich sollte rows-1 zum letzten Item scrollen, da das letzte Item die Nr. rows-1 hat...
A3D
Beiträge: 2
Registriert: 21. Februar 2007 23:20

Beitrag 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
comer352l
Beiträge: 47
Registriert: 10. Juli 2007 18:10

Beitrag 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.
Antworten