QTableView/QSortFilterProxyModel : Zeile einfügen

Alles rund um die Programmierung mit Qt
Antworten
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

QTableView/QSortFilterProxyModel : Zeile einfügen

Beitrag von chrislo1976 »

Hallo zusammen!

Ich verwende ein QTableView mit einem von QSortFilterProxyModel abgeleiteten Model. Das QSortFilterProxyModel verwende ich, weil ich innerhalb der Liste sortieren und eben filtern möchte.
An und für sich funktioniert das auch so wie ich es gern hätte. Allerdings funktioniert das Einfügen einer Zeile nicht so ganz wie ich es gern hätte:

Wenn ich eine Zeile an aktueller Position einfüge:

Code: Alles auswählen

int row = msgView->currentIndex().row();
msgView->model()->insertRow(row);
wird die Zeile immer in der 1.Zeile eingefügt, und nicht in der Zeile die vorher aktiv war.
Seltsam ist, dass die vertikale Beschriftung (Zeilennummern) aber schon abhängig von 'row' (siehe oben) verändert wird. Im angefügten Screenshot kann man das erkennen. Wenn die Liste so angezeigt würde dass diese Zeilennummern aufsteigend wären würde es so sein wie ich es gern hätte. Allerdings hab ich nichts gefunden wo ich dieses Verhalten beeinflussen könnte.

Ich möchte allgemein an beliebiger Position eine Zeile einfügen können, die dort auch angezeigt wird und erst bei Neusortierung ggf. verschoben wird.

Ich verwende VS2003.net mit QT4.3.4.

Das Model richte ich so ein :

Code: Alles auswählen

// Model einrichten
proxyModel = new diagToolProxyModel(this);
proxyModel->setSourceModel(new QStandardItemModel(1, 6, this));
proxyModel->setDynamicSortFilter(false);
	
// Spalten beschriften
proxyModel->setHeaderData(0, Qt::Horizontal, tr("Meldenummer"));
proxyModel->setHeaderData(1, Qt::Horizontal, tr("Meldetext"));
proxyModel->setHeaderData(2, Qt::Horizontal, tr("Symbol"));
proxyModel->setHeaderData(3, Qt::Horizontal, tr("Operand"));
proxyModel->setHeaderData(4, Qt::Horizontal, tr("Pegel"));
proxyModel->setHeaderData(5, Qt::Horizontal, tr("Priorität"));
die Ansicht so:

Code: Alles auswählen

// View einrichten
msgView->setModel(proxyModel);
msgView->setAlternatingRowColors(true);
msgView->setSortingEnabled(true);
msgView->sortByColumn(0, Qt::AscendingOrder);

Ich hoffe ich konnte mein Anliegen "rüberbringen" und noch mehr hoffe ich dass mir da jemand weiterhelfen kann...

Gruß,
Christian
Dateianhänge
TableView.jpg
TableView.jpg (23.66 KiB) 2092 mal betrachtet
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag von chrislo1976 »

Hallo!

Habe jetzt festgestellt dass der Effekt auftritt sobald die Tabelle einmal sortiert wurde.
Wenn das Sortieren (in der View) anfangs ausgeschaltet ist funktioniert das Einfügen einer Zeile wie gewollt, sortiere ich dann die Tabelle einmal werden neue Zeilen nur noch ganz oben an erster Stelle eingefügt, auch wenn ich vor dem Einfügen das Sortieren wieder explizit ausschalte...

Mir würde ja ein QTableWidget reichen, aber da kann ich das Sortieren ja leider nicht beeinflussen...

Gruß,
Christian
Antworten