繁体   English   中英

C++ 类和 QAbstractTableModel 之间的数据传输

[英]Data transfer between C++ class and QAbstractTableModel

我正在为我现有的代码构建一个 GUI。 我有一个保存大部分数据的内存类,我想在 Qtable 中显示数据。 我还希望表格随着我的数据更新而更新。

结构如下:

//memory.hpp
class Memory
{
    //Holds and updates the data.


}

//memory_model.hpp
class MemoryModel : public QAbstractTableModel
{
    Q_OBJECT
public:
    MemoryModel(QObject *parent = nullptr);
    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
    int columnCount(const QModelIndex &parent = QModelIndex()) const override;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
};

将数据从内存传递到 memory_model 的最佳方式是什么。 当内存中的数据发生变化时,如何触发memory_model中的数据变化?

如何触发数据更改取决于数据如何更改。

例如,在将任何新行插入后端 C++ 内存类之前,您应该对MemoryModel对象调用beginInsertRows() 然后,您将实际更改Memory C++ 数据结构的状态,然后调用endInsertRows()让表模型知道您已完成插入要插入的所有行。

存在类似的调用模式,用于插入/删除列(使用beginInsertColumns()removeInsertColumns() )、移动行或颜色(使用beginMoveRows() / endMoveRows() / beginMoveColumns() / endMoveColumns() ,或者只是做一个完整的投掷-all-cached-data-away-and-repopulate-from-scratch(使用beginResetModel() / endResetModel() )。

如果您不需要添加/删除/移动行或列,而只想让表更新/刷新/重新查询特定单元格或一组单元格的内容,您可以通过让 MemoryModel 发出您希望表格更新的单元格的dataChanged()信号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM