我正在尝试在C ++和QT中使用模型/视图架构并且需要了解,如何将QTableView中的一个单元划分为更多行或更多列并使用不同的小部件的最佳方法对于他们以及如何显示模型中的某些列。
我想每行保留这个结构:
- int
- MyStruct - int
- QString
- 2ndStruct - double
- double
- QString
重要的是:
我有几个问题:
答案 0 :(得分:1)
我建议为不同的需求设置单独的模型,但让它们对相同的数据进行操作。
即。模型类只是实际数据的接口,它们不需要包含数据。
假设您有一个名为RowData
的结构/类,数据包含您所描述的数据。
然后,所有行都可以是这些对象的列表或向量,例如, QVector<RowData>
然后,每个模型可以在相同的引用或指向这样的容器的指针上进行操作
class AllDataInSeparateColumnsModel : public QAbstractTableModel
{
public:
AllDataInSeparateColumnsModel(QVector<RowData> &data, QObject *parent = nullptr)
: QAbstractTableModel(parent), m_data(data)
{}
int rowCount() const { return m_data.count(); }
int columnCount() const { return 6; }
private:
QVector<RowData> &m_data;
};
此模型的data()
方法可以将第0列映射到第一个int,第1列映射到MyStruct中的int,第2列映射到MyStruct中的QString,依此类推。
如果模型每列需要多个值,那么它可以定义自己的附加角色。然后,视图需要一个匹配的委托,可以根据需要检索其他数据(标准委托只显示Qt::DisplayRole
的字符串值)