有趣的事情雖然 - doc指出,這是一個虛擬的方法:
虛擬的QVariant headerData(INT部分,Qt的::取向方向, INT角色)const的
(... )
的QVariant QAbstractProxyModel :: headerData(INT 部,Qt的::取向方位,INT角色)常量[虛]
從QAbstractItemModel :: headerData()重新實現。
但在實際headerthe virtual
關鍵字缺少:
C:\ Qt的\ Qt5.2.1 \ 5.2.1 \ msvc2010 \包括\ QtCore \ qabstractproxymodel。^ h
(...)
QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const; //line76
QVariant headerData(int section, Qt::Orientation orientation, int role) const; //line77
我在正常的Qt目錄檢查,它也丟失:
C:\ Qt的\ Qt5.2.1 \ 5.2.1 \ SRC \ qtbase的\ src \ corelib的\ itemmodels \ qabstractproxymodel.h
(...)
QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
我已經做了一個試驗:
sim = new QStandardItemModel (3,3);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
sim->setData(sim->index(i,j), QString("%1%2").arg(QChar(j+65), QString().setNum(i+1)));
if (i==0)
sim->setHeaderData(j, Qt::Horizontal, QChar(j+65));
}
sim->setHeaderData(i, Qt::Vertical, i+1);
}
transposedModel = new TransposeProxyModel;
transposedModel->setSourceModel(sim);
QAbstractItemModel * aim = transposedModel;
QAbstractProxyModel *apm = transposedModel;
for (int i = 0; i < apm->rowCount(); i++) {
qDebug() << "aim->Qt::Vertical(" << i << ")" << aim->headerData(i, Qt::Vertical, Qt::DisplayRole);
qDebug() << "apm->Qt::Vertical(" << i << ")" << apm->headerData(i, Qt::Vertical, Qt::DisplayRole);
qDebug() << "transposedModel->Qt::Vertical(" << i << ")" << transposedModel->headerData(i, Qt::Vertical, Qt::DisplayRole);
}
和調試是:
aim->Qt::Vertical(0) QVariant(int, 1)
apm->Qt::Vertical(0) QVariant(int, 1)
[ TransposeProxyModel::headerData ] //qDebug in TransposeProxyModel::headerData
transposedModel->Qt::Vertical(0) QVariant(QChar, 'A')
aim->Qt::Vertical(1) QVariant(int, 1)
apm->Qt::Vertical(1) QVariant(int, 1)
[ TransposeProxyModel::headerData ] //qDebug in TransposeProxyModel::headerData
transposedModel->Qt::Vertical(1) QVariant(QChar, 'B')
aim->Qt::Vertical(2) QVariant(int, 1)
apm->Qt::Vertical(2) QVariant(int, 1)
[ TransposeProxyModel::headerData ] //qDebug in TransposeProxyModel::headerData
transposedModel->Qt::Vertical(2) QVariant(QChar, 'C')
所以我想這就是問題 - 該方法不是抽象的,這就是爲什麼它不會調用我的重寫方法。 Qt的錯誤?或者是故意的?我也參加了一場不期而遇
C:\ Qt的\ Qt5.2.1 \ 5.2.1 \ SRC \ qtbase的\ src \ corelib的\ itemmodels \ qabstractproxymodel.cpp
/*!
\reimp
*/
QVariant QAbstractProxyModel::headerData(int section, Qt::Orientation orientation, int role) const
{
Q_D(const QAbstractProxyModel);
int sourceSection;
if (orientation == Qt::Horizontal) {
const QModelIndex proxyIndex = index(0, section);
sourceSection = mapToSource(proxyIndex).column();
} else {
const QModelIndex proxyIndex = index(section, 0);
sourceSection = mapToSource(proxyIndex).row();
}
return d->model->headerData(sourceSection, orientation, role);
}
我想這應該得到適當的頭無論如何 - 它調用mapToSource,這是純虛擬的,這應該獲得正確的索引?
這是在這裏深夜...但如果我看到正確的,你想要什麼,你得到的是相同的。也許你想檢查一下; D – 2014-09-26 01:19:57
是的 - 我拼錯了我實際取得的成績。問題是,我在所有列(從第一列)獲取相同的標題,在所有行(從第一行)獲得相同的標題。我無法改變它 - 甚至手動... – murison 2014-09-26 07:12:14
嘿,你的帖子中的鏈接不幸死了,你可以發佈你的完整工作代碼供將來參考? – 2015-08-26 08:28:42