Russian Qt Forum
Октябрь 01, 2024, 07:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: модель QStandardItemModel  (Прочитано 3247 раз)
Larry
Гость
« : Декабрь 11, 2010, 19:15 »

Добрый вечер, форумчане!Подскажите пожалуйста, где я делаю ошибку. В модель QSandardItemModel я загружаю данные из таблицы с фильмами. Выборку делаю по жанрам и отображаю все в QTreeView. Но если в там больше чем один фильм, то отображается только последнее название, а в остальных пустые строки.
присоединяю скриншот с проблемой
Записан
crossly
Гость
« Ответ #1 : Декабрь 11, 2010, 20:03 »

я сомневаюсь что здесь кто то сможет провести реверс инженериг из картинки в код.....
Записан
Larry
Гость
« Ответ #2 : Декабрь 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();
}
}
« Последнее редактирование: Декабрь 11, 2010, 20:30 от Larry » Записан
Larry
Гость
« Ответ #3 : Декабрь 11, 2010, 20:29 »

может здесь как-то надо обновлять модель?..
Записан
MoPDoBoPoT
Гость
« Ответ #4 : Декабрь 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);
...
 
Записан
Larry
Гость
« Ответ #5 : Декабрь 11, 2010, 21:41 »

большое спасибо,..протупил Смеющийся
сделал вот так и все заработало:
Код:
pModel->insertRows(i, 1, indexModel);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.068 секунд. Запросов: 21.