[英]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.