crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в добавление данных в CustomTableModel
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 18.5.2010, 15:28
 
Цитата(Гость_korel_* @ 18.5.2010, 15:56) *
Проблема собственно в том, что заранее я не знаю размера lista,
Почитай "Ленивое заполнение (Lazy Population) модели данных"
Также посмотри реализацию QSqlQueryModel, т.к. БД не отдаёт всю информацию разом, а выдаёт её построчно, т.к. информации может быть слишком много. Эта модель читает информацию по мере того, как представление её запрашивает

Цитата(azure @ 18.5.2010, 19:24) *
Наполняйте пока не кончится.
программа задумчивая получится - плохо
azure Дата 18.5.2010, 15:24
  Я НЕ понял, в чем суть проблемы. Ну не знаете, и что? Наполняйте пока не кончится. Цикл while как раз для этого и придуман.
korel Дата 18.5.2010, 11:56
  создал 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;
}
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 18.4.2024, 23:26