#c #qt #user-interface
Вопрос:
Я создаю графический интерфейс для своего существующего кода. У меня есть класс памяти, который содержит большую часть моих данных, и я хочу отобразить данные в 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 amp;parent = QModelIndex()) const override;
int columnCount(const QModelIndex amp;parent = QModelIndex()) const override;
QVariant data(const QModelIndex amp;index, int role = Qt::DisplayRole) const override;
};
каков наилучший способ передачи данных из памяти в memory_model. И как мне инициировать изменения данных в memory_model при изменении данных в памяти?
Ответ №1:
Способ инициирования изменений данных зависит от того, как изменяются данные.
Например, прежде чем вставлять какие-либо новые строки в свой внутренний класс памяти C , вы должны вызвать begininsertrow() для вашего MemoryModel
объекта. Затем вы бы выполнили фактическое изменение состояния вашей Memory
структуры данных C , а затем вызвали бы endinsertrow(), чтобы сообщить табличной модели, что вы закончили вставку всех строк, которые намеревались вставить.
Аналогичный шаблон вызова существует для вставки / удаления столбцов (с beginInsertColumns()
помощью / endInsertColumns()
и beginRemoveColumns()
/ endRemoveColumns()
), перемещения строк или цветов (с beginMoveRows()
помощью / endMoveRows()
/ beginMoveColumns()
/ endMoveColumns()
или просто выполнения полного удаления всех кэшированных данных и повторного заполнения с нуля (с beginResetModel()
помощью / endResetModel()
).
Если вам не нужно добавлять / удалять / перемещать строки или столбцы, а просто нужно, чтобы таблица обновляла / обновляла / запрашивала содержимое определенной ячейки или набора ячеек, вы можете сделать это, заставив вашу MemoryModel выдавать сигнал dataChanged() для ячеек, которые вы хотите изменить таблица для обновления.