Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Larry от Декабрь 11, 2010, 19:15



Название: модель QStandardItemModel
Отправлено: Larry от Декабрь 11, 2010, 19:15
Добрый вечер, форумчане!Подскажите пожалуйста, где я делаю ошибку. В модель QSandardItemModel я загружаю данные из таблицы с фильмами. Выборку делаю по жанрам и отображаю все в QTreeView. Но если в там больше чем один фильм, то отображается только последнее название, а в остальных пустые строки.
присоединяю скриншот с проблемой


Название: Re: модель QStandardItemModel
Отправлено: crossly от Декабрь 11, 2010, 20:03
я сомневаюсь что здесь кто то сможет провести реверс инженериг из картинки в код.....


Название: Re: модель QStandardItemModel
Отправлено: Larry от Декабрь 11, 2010, 20:08
вот функция в которой происходит загрузка:

Код:
void DBase::readTextFile(QString nameFile, QStandardItemModel* pModel)
{
QFile file(nameFile);

QSqlTableModel* model = new QSqlTableModel();
model->setTable("film");
model->select();

if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
qDebug() << QObject::tr("Невозможно открыть файл");
else
{
qDebug() << QObject::tr("Файл открыт");

QTextStream in(&file);
QString line;

pModel->setHeaderData(0, Qt::Horizontal, QObject::tr("Жанры"));

int index = 0;

while(!in.atEnd())
{
line = in.readLine();

QModelIndex indexModel = pModel->index(index++, 0);
pModel->setData(indexModel, line);

pModel->insertColumns(0, 1, indexModel);

model->setFilter("genre = '" + line + "'");
model->select();

for(int i = 0; i < model->rowCount(); i++)
{
QString str = model->record(i).value("name").toString();

if(!str.isEmpty())
{
pModel->insertRows(0, 1, indexModel);
pModel->setData(pModel->index(i, 0, indexModel), str);

qDebug() << QObject::tr("Фильм ") << str << "(" << line << ")";
}
}
}

file.close();
}
}


Название: Re: модель QStandardItemModel
Отправлено: Larry от Декабрь 11, 2010, 20:29
может здесь как-то надо обновлять модель?..


Название: Re: модель QStandardItemModel
Отправлено: MoPDoBoPoT от Декабрь 11, 2010, 21:22
Вот ошибка:
Код:
...
pModel->insertRows(0, 1, indexModel);                   <= вставляем строку в начало
pModel->setData(pModel->index(i, 0, indexModel), str);  <= а данные устанавливаем в i-ую (последнюю) строку
...
Надо как-то так:
Код
C++ (Qt)
...
pModel->insertRow(i, indexModel);
pModel->setData(pModel->index(i, 0, indexModel), str);
...
 


Название: Re: модель QStandardItemModel
Отправлено: Larry от Декабрь 11, 2010, 21:41
большое спасибо,..протупил ;D
сделал вот так и все заработало:
Код:
pModel->insertRows(i, 1, indexModel);