Компьютерный форум

Компьютерный форум (http://www.hardforum.ru/)
-   Trolltech Qt (http://www.hardforum.ru/f191/)
-   -   Добавление данных в CustomTableModel (http://www.hardforum.ru/t83008/)

korel 18.05.2010 13:48

Добавление данных в CustomTableModel
 
я создал 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;
}


AD 18.05.2010 16:29

Я сейчас уже не в Qt программирую, поэтому не помню всех тонкостей. Уверен, что вот здесь Вам помогут быстрее:
Crossplatform

korel 18.05.2010 16:43

Спасибо, но я там выложил свой вопрос, еще до того как описал его здесь. Пока тишина)

AD 18.05.2010 17:55

Цитата:

Спасибо, но я там выложил свой вопрос, еще до того как описал его здесь. Пока тишина)
уже ответили! ;)


Часовой пояс GMT +4, время: 04:19.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.