crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Вылетает с ошибкой "...corrupted double-linked list", просьба о помощи
Гость_Demonsh_*
сообщение 16.7.2008, 9:39
Сообщение #1





Гости








    


Прошу помощи у многоуважаемого ALL. Написал достаточно простенький софт на С++ с библиотекой QT. Код проблемного участка:
{
  AddHost *formAddHost = new AddHost;
  formAddHost->show();
  connect(formAddHost->ui.ButtonOk, SIGNAL(clicked()), this, SLOT(RefreshTables()));  // Refresh table when formAddHost closeds
}
void RefreshTables()
{
    queryHosts->setTable("view_hosts");
    queryHosts->select();
    ui.tableViewHosts->resizeRowsToContents();
    ui.tableViewHosts->resizeColumnsToContents();
    ui.tableViewHosts->show();  
}

в данном случае я вызываю форму formAddHost для добавления/редактирования записи и хочу что бы после ее закрытия обновилась таблица (tableViewHosts) в родительской форме.
Проблема в том что если выполняется функция RefreshTables то в родительской таблице появляется много пустых строк после всех записей и при попытке сделать скрол вниз программа вылетает с ошибкой:
Цитата
*** glibc detected *** /****/****/Project: corrupted double-linked list: 0x08141278 ***

может tableView нужно как-то очищать при повторной загрузке?
Причина редактирования: для кода используем тэг code=cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.7.2008, 13:21
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


версия Qt какая? откуда заполняется представление?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Demonsh_*
сообщение 16.7.2008, 15:56
Сообщение #3





Гости








    


libqt4-4.4.0-17.1
libqt4-sql-mysql-4.4.0-18.1
заполняется из MySQL базы. При запуске программы:
Цитата
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(db_serverName);
db.setDatabaseName(db_database);
db.setUserName(db_username);
db.setPassword(db_password);
db.open()
//
queryHosts = new QSqlTableModel;
queryHosts->setTable("view_hosts");
queryHosts->select();
ui.tableViewHosts->setModel(queryHosts);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.7.2008, 16:49
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Гость_Demonsh_* @ 16.7.2008, 13:39) *
хочу что бы после ее закрытия обновилась таблица

что-то я изначально не внимательно прочитал.
Тебе чтобы обновить таблицу нужно вызвать метод select() для модели (queryHosts->select();), а представление с таблицей сами договорятся об обновлении
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Demonsh_*
сообщение 16.7.2008, 17:23
Сообщение #5





Гости








    


вот я и вызываю select() - 2й строчкой в функции RefreshTables(). Таблица обновляется и видны сделанные изменения. Проблема с появлением кучи пустых строк в конце таблицы и вылете программы при попытке скрола.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.7.2008, 17:35
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


попробуй после селекта все закоментировать, и зачем ты метод show() вызываешь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Demonsh_*
сообщение 16.7.2008, 18:31
Сообщение #7





Гости








    


все убрал в ф-ции RefreshTables() кроме:
queryHosts->setTable("view_hosts");
queryHosts->select();

ситуация не изменилась :(. Может механизм обновления таблицы надо использовать другой. Попробовал скомпилировать под виндовс. Тот-же глюк, добавило ровно столько пустых строк в конец, сколько уже было записей. Правда под виндой программа не вываливается. Создается впечатление что нужно как-то очистить ui.tableViewHosts перед обновлением данных.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Demonsh_*
сообщение 16.7.2008, 18:56
Сообщение #8





Гости








    


Опытным путем установил что проблема в строке:
Цитата
queryHosts->setTable("view_hosts");

по другому переформировал код ( так что-бы setTable() вызывалась только один раз в программе - вроде так же оно и надо?) и проблема ушла. Официальная дока кстати рекомендует для обновления использовать именно ф-ю select();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.1.2025, 6:54