两个表的不同标头,它们继承自同一个tableModel类

时间:2011-08-08 14:44:54

标签: qt4 qtableview

我有2个从同一个类继承的tableView(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 个答案:

答案 0 :(得分:2)

一种简单的方法是为一个或另一个表视图创建代理模型,并通过代理模型覆盖标头信息。对于这个应用程序,它应该不是很困难。

那就是说,我想知道导致列以某种方式对同一数据有不同意义的情况,只是在不同的表中。

答案 1 :(得分:0)

另一种简单的方法是在模型中创建一个property,允许您设置标题的值。例如:

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