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.