在共享相同数据模型的 2 个表中显示不同的 header 名称?

Show different header names in 2 tables that share the same data model?

我有 2 个基于相同数据模型的不同表。它们的内容是用它们自己的 QSortFilterProxyModel 生成的,基于相同的数据模型。问题是我不能给他们不同的 header 名称。在以下示例中,两个表的名称均为 Table2。我该怎么做才能让他们显示不同的 header 名称?

QStandardItemModel* model = new QStandardItemModel();

QSortFilterProxyModel* proxyModel1 = new QSortFilterProxyModel(this);
proxyModel1->setSourceModel(model);
proxyModel1->setHeaderData(0,  Qt::Horizontal, "Table1");


QSortFilterProxyModel* proxyModel2 = new QSortFilterProxyModel(this);
proxyModel2->setSourceModel(model);
proxyModel2->setHeaderData(0,  Qt::Horizontal, "Table2");

根据评论,您可能会有类似于以下基本示例的内容...

class proxy_model: public QSortFilterProxyModel {
  using super = QSortFilterProxyModel;
public:
  explicit proxy_model (QObject *parent = nullptr)
    : super(parent)
    {}
  virtual QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
    {
        if (section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole)
        {
            return m_data.at(section).at(orientation).at(role);
        }
        else
        {
            return super::headerData(section, orientation, role);
        }
    }
  virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override
    {
      m_data[section][orientation][role] = value;
      return true;
    }
private:
  std::map<int/* section */, std::map<Qt::Orientation/* orientation */, std::map<int/* role */, QVariant>>> m_data;
};

然后你的代码变成(未经测试)...

auto *model = new QStandardItemModel;

auto*proxyModel1 = new proxy_model(this);
proxyModel1->setSourceModel(model);
proxyModel1->setHeaderData(0,  Qt::Horizontal, "Table1");


auto *proxyModel2 = new proxy_model(this);
proxyModel2->setSourceModel(model);
proxyModel2->setHeaderData(0,  Qt::Horizontal, "Table2");