我正在Qt中实现自定义TableModel(MyTableModel
类),基于QAbstractTableModel
来显示存储在MyDataStorage
类对象中的数据。它需要为rowCount()
定义columnCount()
和MyTableModel
函数。
在我的情况下,我有一个包含MyDataStorage
的课程QList<MyData> dataList
。 MyData
类由五个成员变量组成(一个int
,一个QDate
和三个QString
。
MyTableModel::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
成员的数量将来会发生变化。
你的主张是什么?
答案 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
个对象。