мне нужно несколько общих советов, чтобы указать мне в правильном направлении решения этой проблемы: У меня есть .txt файл с данными таблицы вроде следующего:чтение и просмотр вкладок разделителями текстовые файлы в Qt C++ с использованием QTableView
Time Pin
11:00 EIO4
12:55 EIO6
16:40 EIO4
20:10 EIO3
etc......
Мне нужно разобрать этот .txt-файл. Затем мне нужно отобразить эту таблицу в Qt (возможно, в QTableView
).
Я посмотрел в использовании QTableView, и, кажется, я прохожу QAbstractItemModel*
к QTableView
с помощью QTableView::setModel(QAbstractItemModel* model)
, после чего мой QTableView будет отображать любые данные в QAbstractItemModel (правильно?).
Если этот последний абзац был логичным, то мой следующий вопрос: как мне создать QAbstractItemModel
с помощью моего .txt-файла? Я не вижу никаких функций в документации, которые это делают? (Примечание: кто-то предложил создать QStandardItemModel)
(Обратите внимание, что этот абзац больше не уместен) QModelIndex createIndex(int row, int column, void* ptr)
, похоже, что-то с этим связано, может быть? Возможно, это создает QModelIndex
, который может быть передан в QAbstractItemModel
с использованием QAbstractItemModel::insertRow(QModelIndex)
? Однако я до сих пор не знаю, как сделать эти объекты QModelIndex
имеющими какое-либо отношение к моим данным .txt.
QStandardItemModel
документация говорит
Если вы хотите, список или дерево, обычно создается пустой
QStandardItemModel
и использоватьappendRow()
для добавления элементов в модели, иitem()
доступ к элементу. Если ваша модель представляет таблицу, вы, , обычно передаете размеры таблицы в конструкторQStandardItemModel
и используетеsetItem()
для размещения позиций в таблице. Вы также можете использоватьsetRowCount()
иsetColumnCount()
, чтобы изменить размеры модели . Чтобы вставить предметы, используйтеinsertRow()
илиinsertColumn()
, а также для удаления предметов используйтеremoveRow()
илиremoveColumn()
.
Эти функции, что «добавить строки» взять QList<QStandardItem*>
«S в качестве аргументов, поэтому мне нужно создать QLists, что каждый из которых содержит указатели QStandardItems, которые содержат данные каждой ячейки?
Так что я буду использовать
void QStandardItemModel::insertRow(int row, const QList<QStandardItem *> & items)
http://doc.qt.io/qt-5/qstandarditemmodel.html#insertRow
Наряду с аргументом QList<QStandardItem*>
генерируемых повторными вызовами "<<
", проходящих QStandardItem*
указателей на пустой QList
.
Сделает QStandardItem
«S с помощью конструктора
QStandardItem::QStandardItem(const QString & text)
где я получаю мой QString text
путем анализа QFile в строки QString.
Все выглядит хорошо?
Или, может быть, я должен пропустить создание QLists и перейти непосредственно от генерации QStandardItem
«с, чтобы передать их в QStandardItemModel
с помощью void QStandardItemModel::setItem(int row, int column, QStandardItem * item)
Edit: Я в конечном итоге пропуск создания QLists со следующим способом: QFile файл -> QString линия -> QStringList peices -> QStandardItem -> QStandardItemModel -> QTableView
Спасибо всем, кто способствовал
Вы не можете создать абстрактную модель, это абстрактно. Вам нужно подклассифицировать его. Вы можете ознакомиться с документами для получения дополнительной информации об этом: http://doc.qt.io/qt-5/qabstracttablemodel.html –
Я посмотрел, он говорит, что мой подкласс QAbstractTableModel должен реализовать 'QVariant QAbstractItemModel :: data (const QModelIndex & index, int role = Qt :: DisplayRole) const, но я не знаю, как создавать объекты QModelIndex, которые имеют какое-либо отношение к моему .txt-файлу ?! Я добавил пункт к моему вопросу. – OrangeSherbet