检索QTableView

时间:2017-05-08 07:32:44

标签: c++ qt qtableview

我使用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();
}

0 个答案:

没有答案