Доброе утро,
У меня есть некоторые проблемы с созданием таблицы из файла.
В основном у меня есть кнопка для загрузки CSV-файлов, и я хочу показать файлы в QML TableView...
Я думаю, что моя главная проблема в том, что у меня есть динамическое количество столбцов.
TableView
{
id: tableView
enabled: dynVars.csvVarTableModel.b_csvEnabled
frameVisible: false
sortIndicatorVisible: false
model: dynVars.csvVarTableModel
resources:
{
var roleList = dynVars.csvVarTableModel.roleStringList
var temp = []
for(var i=0; i<roleList.length; i++)
{
var role = roleList[i]
temp.push(columnComponent.createObject(tableView, { "role": role, "title": role}))}
return temp
}
}
}
columnComponent - это просто TableViewColumn... Я работал с QAbstractTableModel. И я сделал все основные вещи, пока я повторно реализовал следующие функции:
public:
int rowCount (const QModelIndex &parent = QModelIndex()) const;
int columnCount (const QModelIndex &parent = QModelIndex()) const;
// QVariant headerData(int section, Qt::Orientation orientation, int role) const;
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
private:
QHash<int, QByteArray> roleNames() const;
Я попытался перегрузить функцию roleNames, чтобы у меня была роль для каждого столбца. Я так понял документацию...
QHash<int,QByteArray> CSVVarTableModel::roleNames() const
{
QHash<int, QByteArray> roles = QAbstractTableModel::roleNames();
for(int i = 0; i < m_v_headers.size();i++)
roles[i + Qt::UserRole] = m_v_headers.at(i).toLatin1();
return roles;
}
в data() я просто возвращаю m_vv_table.at(index.row()).at(role);
, если роль является одной из UserRoles....
Это отлично работает для первого CSV-файла, который я загружаю в таблицу... Но после этого, когда я хочу загрузить другой файл, кажется, что имена ролей не обновляются в QML. Я уже пробовал несколько комбинаций, чтобы решить проблему... по этой же причине у меня сейчас нет хорошего примера кода, все немного запутано...
Я, наверное, на совершенно неправильном пути, я не могу представить, что так сложно загрузить некоторые простые файлы .... это сводит меня с ума.
Было бы здорово, если бы кто-нибудь просто дал подсказку или небольшой пример, как загрузить файл с динамическим количеством столбцов.
с уважением,
Мо
QAbstractTableModel
, потому чтоQAbstractTableView
нет?QAbstractItemModel::roleNames()
не следует изменять, он просто возвращает отображаемые роли, а не фактические заголовки столбцов, которые отображаются с табличным представлением, для этого вы должны реализоватьQAbstractItemModel::headerData
. Обратитесь к документации для получения дополнительной информации о данных заголовка. - person xander   schedule 27.10.2017TableView
с простымQAbstractTableModel
и посмотреть, как они работают вместе. К сожалению, у меня нет доступа к банкомату среды разработки Qt, чтобы проверить это. - person xander   schedule 27.10.2017