【问题标题】:Data transfer between C++ class and QAbstractTableModelC++ 类和 QAbstractTableModel 之间的数据传输
【发布时间】:2021-12-18 01:53:40
【问题描述】:

我正在为我现有的代码构建一个 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++ qt user-interface


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多