Различные заголовки для двух таблиц, которые наследуются от одного и того же класса tableModel - PullRequest
1 голос
/ 08 августа 2011

У меня есть 2 tableViews, которые наследуются от одного и того же класса (TableModel), который, в свою очередь, наследуется от QAbstractTableModel. Я хотел бы добавить заголовки для 2 таблиц, но эти заголовки должны быть разными для каждой таблицы. В моей TableModel у меня есть этот метод:


    QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const
    {
        if (role != Qt::DisplayRole)
            return QVariant();

        if (orientation == Qt::Horizontal) {
            switch (section) {
            case 0:
                return tr("Header1");

            case 1:
                return tr("Header2");

            case 2:
                return tr("Header3");

            default:
                return QVariant();
            }
        }
        return QVariant();
    }

Но это будет работать только для одной из таблиц. Как я могу установить разные заголовки для другой таблицы?

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Один простой способ - создать модель прокси для одного или другого табличного представления и переопределить информацию заголовка через модель прокси.Для этого приложения это не должно быть очень сложным.

Тем не менее, мне интересно, какие обстоятельства приводят к тому, что столбцы как-то означают что-то другое для одних и тех же данных, просто в другой таблице.

0 голосов
/ 22 августа 2011

Другим простым способом было бы создать в вашей модели свойство , которое позволяло бы вам устанавливать значение заголовков.Например:

public class TableModel {
    Q_PROPERTY(QString header1 header1 setHeader1);
    QString _header1;
    // ...
public:
    QString header1() { return _header1; }
    void setHeader1(const QString& header) { _header1 = header; }
    // ...
};

И тогда вы можете вернуть header1() в вашей функции данных:

QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if (role != Qt::DisplayRole)
        return QVariant();

    if (orientation == Qt::Horizontal) {
        switch (section) {
        case 0:
            return header1();

        case 1:
            return header2();

        case 2:
            return header3();

        default:
            return QVariant();
        }
    }
    return QVariant();
}
...