【问题标题】:Different headers for two table which inherit from the same tableModel class从同一个 tableModel 类继承的两个表的不同标题
【发布时间】:2011-10-22 11:15:45
【问题描述】:

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

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

【问题讨论】:

  • 您有从表模型继承的表视图?
  • 是的...我有 2 个从表模型继承的表视图

标签: qt4 qtableview


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    另一种简单的方法是在您的模型中创建一个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();
    }
    

    【讨论】:

    • 如果两个 tableview 共享指向同一个模型的指针,那么这将不起作用。
    猜你喜欢
    • 2013-06-05
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2016-11-25
    相关资源
    最近更新 更多