QTableView: Vertical Header abhängig von sortByColumns
Verfasst: 19. April 2008 16:15
Hallo zusammen,
ich habe eine QTableView welche mit Daten aus einem QSqlQueryModel resp. zwischengeschaltetem QSortFilterProxyModel abgefüllt wird.
Nach einigen Stunden im Schweisse meines Angesichts bin ich jetzt soweit, dass ich die View durch Klicken auf die Spaltenheader entsprechend sortieren kann. Dank mapToSource werden auch nach dem Sortieren die richtigen Records des QSqlQueryModels angesprochen, wenn ich etwas editieren will. Soweit also alles tipptopp.
Das Einzige was mir einfach nicht gelingen will, ist den Vertical Header der View quasi von der Sortierung auszuschliessen. Dieser zeigt ja an sich einfach die Zeilennummern an. Nach einer Sortierung gerät diese Nummerierung aber durcheinander weil die Werte irgendwie hart mit den Zeilen verknüpft zu sein scheinen.
Hat jemand eine Idee, wie so etwas zu bewerkstelligen ist? In den Examples konnte ich leider kein Beispiel finden, bei dem Sortierung mit Vertical Headers vorkommt. Immer nur das Eine oder Andere.
Verwendet wird Qt 4.2.3 mit MinGW unter Windows.
Codemässig sieht das Ganze etwa so aus (irrelevanten Code habe ich gelöscht):
1. Erstellen der QTableView:
2. Abfüllen der Daten nachdem eine Suche getätigt wurde
ich habe eine QTableView welche mit Daten aus einem QSqlQueryModel resp. zwischengeschaltetem QSortFilterProxyModel abgefüllt wird.
Nach einigen Stunden im Schweisse meines Angesichts bin ich jetzt soweit, dass ich die View durch Klicken auf die Spaltenheader entsprechend sortieren kann. Dank mapToSource werden auch nach dem Sortieren die richtigen Records des QSqlQueryModels angesprochen, wenn ich etwas editieren will. Soweit also alles tipptopp.
Das Einzige was mir einfach nicht gelingen will, ist den Vertical Header der View quasi von der Sortierung auszuschliessen. Dieser zeigt ja an sich einfach die Zeilennummern an. Nach einer Sortierung gerät diese Nummerierung aber durcheinander weil die Werte irgendwie hart mit den Zeilen verknüpft zu sein scheinen.
Hat jemand eine Idee, wie so etwas zu bewerkstelligen ist? In den Examples konnte ich leider kein Beispiel finden, bei dem Sortierung mit Vertical Headers vorkommt. Immer nur das Eine oder Andere.
Verwendet wird Qt 4.2.3 mit MinGW unter Windows.
Codemässig sieht das Ganze etwa so aus (irrelevanten Code habe ich gelöscht):
1. Erstellen der QTableView:
Code: Alles auswählen
void MainWindow::createCustomerTable() {
sourceModel = new QSqlQueryModel(this);
proxyModel = new QSortFilterProxyModel(this);
customerTableView = new QTableView;
horizHeader = new QHeaderView(Qt::Horizontal, customerTableView);
vertHeader = new QHeaderView(Qt::Vertical, customerTableView);
proxyModel->setSourceModel(sourceModel);
customerTableView->setModel(proxyModel);
customerTableView->setHorizontalHeader(horizHeader);
customerTableView->setVerticalHeader(vertHeader);
customerTableView->setObjectName("customerTableViewId");
customerTableView->setSortingEnabled(false);
connect(customerTableView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(on_customerTableView_currentRowChanged(const QModelIndex &)));
connect(horizHeader, SIGNAL(sectionClicked(int)), this, SLOT(on_horizHeader_sectionClicked(int)));
}Code: Alles auswählen
void MainWindow::writeCustomerTable(QSqlQuery &query) {
const QModelIndex invalidIndex = QModelIndex(); // wird wohl für removeColumns gebraucht
sourceModel->setQuery(query);
sourceModel->removeColumns(10, 1, invalidIndex);
customerTableView->setSortingEnabled(true);
customerTableView->sortByColumn(1,Qt::AscendingOrder);
}