Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Програмирование платформенно-независимых систем > Trolltech Qt
Перезагрузить страницу Добавление данных в CustomTableModel
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
korel korel вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.05.2010
По умолчанию Добавление данных в CustomTableModel - 18.05.2010, 13:48

я создал 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;
}
Ответить с цитированием
  (#2 (permalink)) Старый
AD AD вне форума
Member
 
Сообщений: 575
Сказал(а) спасибо: 7
Поблагодарили 3 раз(а) в 3 сообщениях
Регистрация: 15.07.2009
По умолчанию 18.05.2010, 16:29

Я сейчас уже не в Qt программирую, поэтому не помню всех тонкостей. Уверен, что вот здесь Вам помогут быстрее:
Crossplatform
Ответить с цитированием
  (#3 (permalink)) Старый
korel korel вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.05.2010
По умолчанию 18.05.2010, 16:43

Спасибо, но я там выложил свой вопрос, еще до того как описал его здесь. Пока тишина)
Ответить с цитированием
  (#4 (permalink)) Старый
AD AD вне форума
Member
 
Сообщений: 575
Сказал(а) спасибо: 7
Поблагодарили 3 раз(а) в 3 сообщениях
Регистрация: 15.07.2009
По умолчанию 18.05.2010, 17:55

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

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление данных из combobox в ячейки Pusher Visual Basic 8 20.07.2011 00:13
Добавление записи в базу данных Koshek .NET 0 27.05.2011 00:25
Добавление данных из эксела в dbGrid nakazanie Другие СУБД 1 28.02.2011 18:44
Добавление данных ComboBox в таблицу Kharkov Вопросы начинающих программистов 1 14.01.2011 11:57
Добавление даты в базу данных Lisen&#39;ok C++ Builder 3 14.05.2009 13:56
Добавление объекта DataGrid для отображения данных Mypppka .NET 4 19.03.2008 16:47
Добавление записи в базу данных LordMatrix C++ Builder 5 09.05.2006 08:48
Добавление данных в Word из Buildera Artycs C++ Builder 1 17.10.2005 10:33
Добавление данных в таблицу arsts Slota MySQL 4 22.09.2005 22:27
Добавление записей в базу данных Echo ASP 2 06.07.2005 18:00
Добавление данных в пустую базу данных 5lim Visual C++ 0 21.12.2004 01:53
Добавление записи в базу данных Paradox zo13 Другие СУБД 0 11.12.2003 13:44



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов