Мне нужен общий совет, чтобы указать мне правильное направление решения этой проблемы: у меня есть файл .txt с табличными данными, например:
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*>
в качестве аргументов, поэтому мне нужно создать QList, каждый из которых содержит указатели QStandardItems, содержащие данные каждой ячейки?
Так что я буду использовать
void QStandardItemModel::insertRow(int row, const QList<QStandardItem *> & items)
http://doc.qt.io/qt-5/qstandarditemmodel.html#insertRow
Наряду с аргументом QList<QStandardItem*>
, сгенерированным повторными вызовами "<<
" с передачей QStandardItem*
указателей на пустой QList
.
Я сделаю QStandardItem
с помощью конструктора
QStandardItem::QStandardItem(const QString & text)
где я получаю свой QString text
, анализируя QFile в QStrings.
Все выглядит хорошо?
Или, может быть, мне следует пропустить создание QList и сразу перейти от создания QStandardItem
к передаче их в QStandardItemModel
с помощью void QStandardItemModel::setItem(int row, int column, QStandardItem * item)
Изменить: в итоге я пропустил создание QLists со следующим процессом: файл QFile -> строка QString -> фрагменты QStringList -> QStandardItem -> QStandardItemModel -> QTableView
Спасибо всем, кто внес свой вклад
QVariant QAbstractItemModel::data(const QModelIndex & index, int role = Qt::DisplayRole) const
, но я не знаю, как создавать объекты QModelIndex, которые имеют какое-либо отношение к моему .txt файлу?! Я добавил абзац к своему вопросу. - person OrangeSherbet   schedule 20.04.2015