Забавная вещь, хотя - doc утверждает, что это виртуальный метод:
виртуальный QVariant headerData (интермедиат раздел, Qt :: ориентирование ориентация, ИНТ роль) Const
(...)
QVariant QAbstractProxyModel :: headerData (Int раздел, Qt :: Ориентация ориентации, Int роль) Const [виртуальный]
Реализовано из QAbstractItemModel :: headerData().
, но в реальной headerthe virtual
ключевое слово отсутствует:
C: \ Qt \ Qt5.2.1 \ 5.2.1 \ msvc2010 \ включать \ QtCore \ QAbstractProxyModel.ч
(...)
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 –
Да - я ошибся, что я на самом деле достиг. проблема в том, что я получаю один и тот же заголовок во всех столбцах (из первого столбца) и одинаковый во всех строках (из первой строки). И я не могу его изменить - даже вручную ... – murison
Эй, ссылка в вашем посте, к сожалению, мертва, можете ли вы опубликовать полный рабочий код для справок в будущем? –