簡體   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