我使用QTableView在表格中显示一些数据。因为没有给出垂直头,Qt会自动为行分配一个行ID。以下示例显示下表:
id|data
-------
1 | B
2 | A
3 | D
4 | C
根据"数据" -column:
对表格进行排序id|data
-------
2 | A
1 | B
4 | C
3 | D
当用户双击某个条目时,我希望能够通过其ID识别所单击的行(即A = 2,B = 1,C = 4,D = 3)。不幸的是," onDoubleClicked"只返回" new" row-id(即A = 1,B = 2,C = 3,D = 4)。
那么当用户双击一行时,如何检索正确的row-id?
table.h
#ifndef TABLE_H
#define TABLE_H
#include <QTableView>
#include <QModelIndex>
#include <QHeaderView>
#include <QDebug>
class Table : public QTableView {
Q_OBJECT
public:
explicit Table() : QTableView() {
setSortingEnabled(true);
connect(this, &Table::doubleClicked, this, &Table::onDoubleClicked);
}
public slots:
void onDoubleClicked(QModelIndex index) {
qDebug() << index.row();
qDebug() << verticalHeader()->logicalIndex(index.row());
qDebug() << verticalHeader()->logicalIndexAt(index.row());
qDebug() << verticalHeader()->visualIndex(index.row());
qDebug() << verticalHeader()->visualIndexAt(index.row());
}
};
#endif // TABLE_H
的main.cpp
#include <QApplication>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>
#include "table.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Table table;
QStandardItemModel model;
QList<QStandardItem*> items;
items.append(new QStandardItem("B"));
items.append(new QStandardItem("A"));
items.append(new QStandardItem("D"));
items.append(new QStandardItem("C"));
model.appendColumn(items);
QSortFilterProxyModel proxy;
proxy.setSourceModel(&model);
proxy.sort(0, Qt::AscendingOrder);
table.setModel(&proxy);
table.show();
return a.exec();
}