1

我有 2 个 tableViews 从同一个类 (TableModel) 继承,而后者又从 QAbstractTableModel 继承。我想为 2 个表添加标题,但每个表的标题应该不同。在我的 TableModel 我有这个方法:

    QVariant TableModel::headerData(int section, Qt::Orientationorientation, int role) const
    {
        如果(角色!= Qt::DisplayRole)
            返回 QVariant();

        if (orientation == Qt::Horizo​​ntal) {
            开关(部分){
            案例0:
                返回 tr("Header1");

            情况1:
                返回 tr("Header2");

            案例2:
                返回 tr("Header3");

            默认:
                返回 QVariant();
            }
        }
        返回 QVariant();
    }

但这仅适用于其中一张桌子。如何为另一个表设置不同的标题?

4

2 回答 2

2

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

也就是说,我想知道导致列在某种程度上对相同数据意味着不同的情况,只是在不同的表中。

于 2011-08-22T18:45:09.643 回答
0

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

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();
}
于 2011-08-22T19:27:32.090 回答