создал CustomTableModel: public QAbstractTableModel и для того, чтобы добавлять в нее данные использую QList<QStringList> list, к тому же переопределил rowCount(), columnCount(), setData(), data().
Проблема собственно в том, что заранее я не знаю размера lista, потому, что он наполняется по мере считывания данных с файла.
вот куски кода - класс CustomTableModel, метод записи в модель, и метод считывания данных с файла:
class CustomTableModel : public QAbstractTableModel
{
Q_OBJECT
QList<QStringList> fileDataList;
public:
CustomTableModel(QObject *parent = NULL);//done
int rowCount(const QModelIndex &parent = QModelIndex()) const
{
return fileDataList.size();
}
int columnCount(const QModelIndex &parent = QModelIndex()) const
{
if(!fileDataList.isEmpty())
return fileDataList.at(0).size();
return -1;
}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
{
if(!index.isValid())
return QVariant();
if(index.row() >= fileDataList.size() || index.row() < 0)
return QVariant();
if(role == Qt::DisplayRole || role == Qt::EditRole)
return fileDataList.at(index.row()).at(index.column());
else
return QVariant();
}
bool setData(const QModelIndex &index, const QVariant &value, int role)
{
if(index.isValid() && role == Qt::EditRole)
{
fileDataList[index.row()].replace(index.column(), value.toString());
emit dataChanged(index, index);
return true;
}
return false;
}
bool insertRows(int row, int count, const QModelIndex &parent)
{
beginInsertRows(QModelIndex(), row, row + count);
endInsertRows();
}
};
void Reader::readFile(const QString &path)
{
QFile file(path);
if(file.open(QIODevice::ReadOnly))
{
while(!file.atEnd())
{
QString str(file.readLine());
QStringList strList(str.split(" ", QString::SkipEmptyParts));
emit fileData(strList);
}
file.close();
}
}
void MainWindow::setFileData(QStringList &strList)
{
QStringList list = strList;
qDebug()<<"new QStringList:\n";
qDebug()<<"row insert flag: " << pModel->insertRow(rCount, QModelIndex());
qDebug()<<"columns insert flag: " <<pModel->insertColumns(0, list.size(), QModelIndex());
for(int i=0;i<list.size();++i)
{
qDebug()<<"column insert flag: " << pModel->insertColumn(i, QModelIndex());
pModel->setData(pModel->index(rCount, i, QModelIndex()), "123", Qt::EditRole);
qDebug()<<"QVariant: " << pModel->data(pModel->index(rCount, i, QModelIndex()), Qt::DisplayRole).toString();
}
qDebug()<<"\n";
++rCount;
}