C ++类的常量参数

时间:2014-01-05 11:58:16

标签: c++ qt

我正在Qt中实现自定义TableModel(MyTableModel类),基于QAbstractTableModel来显示存储在MyDataStorage类对象中的数据。它需要为rowCount()定义columnCount()MyTableModel函数。

在我的情况下,我有一个包含MyDataStorage的课程QList<MyData> dataListMyData类由五个成员变量组成(一个int,一个QDate和三个QStringMyTableModel::rowCount()只返回MyDataStorage的{​​{1}}的长度。 dataList必须返回要在表格中显示的MyTableModel::columnCount()成员数,因此首先我定义了公共方法MyData,以便我可以使用它,如下所示:< / p>

MyData::getParameterCount() {return 5;}

我觉得这不是最好的解决方案,因为列表可能是空的。其他可能性定义:

  • class MyTableModel : public QAbstractTableModel { Q_OBJECT MyDataStorage& im; public: explicit InfoTableModel(MyDataStorage& m, QObject *parent = 0); int rowCount(); inline int columnCount() {return m.getLast().getParameterCount()}; QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role) const; //... } 中的等效函数,
  • 预处理器常量,
  • MyDataStorage的静态成员,
  • 简单MyData因为inline int columnCount() {return 5;}必须随着基础数据模型的每次更改而改变(这是最明显的解决方案,但如果这是正确的我会感到害怕)

但我觉得它们中没有任何一个是正确的解决方案,因为MyTableModel成员的数量将来会发生变化。

你的主张是什么?

2 个答案:

答案 0 :(得分:0)

如果您的存储空间中没有元素,那么您的行数将为零,您的列数也是如此。因此,您应该检查一下:

inline int columnCount() { return (m.isEmpty() ? 0 : m.getLast().getParameterCount()) };

答案 1 :(得分:0)

您可以将MyData::getParameterCount()声明为static成员,然后像这样引用它:

inline int columnCount() const {return MyData::getParameterCount();}

在这种情况下,您不需要任何MyData个对象。