crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Нужна помощь QSqlTableModel + QTableView
bayah
  опции профиля:
сообщение 23.11.2009, 8:52
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 23.11.2009
Пользователь №: 1249

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




Репутация:   0  


Пушу базу данных. Суть вот в чем.

Создаю таблицы.

    query.exec("CREATE TABLE KAF (CODE_K INTEGER PRIMARY KEY ,"
               "NAME_K VARCHAR(100) "
               ");");

    query.exec("CREATE TABLE GROUP (CODE_G INTEGER PRIMARY KEY ,"
               "NAME_G VARCHAR(100), "
               "COUNT_G INTEGER ,"
               "CODE_P INTEGER "
               ");");


В функции Refresh() которая вызывается после кадого изменения в какой либо из таблиц, отображаю эти таблицы
tableView_k, tableView_g это QTableView элементы в ui


void MainForm::Refresh()
{
    QSqlTableModel *kaf =new QSqlTableModel;
    kaf->setTable("KAF");
    kaf->select();
    ui->tableView_k->setModel(kaf);

    QSqlTableModel *group = new QSqlTableModel;
    group->setTable("GROUP");
    group->select();
    ui->tableView_g->setModel(group);
}


Собственно вопрос. Таблица GROUP не выводится. То есть даже имена столбцов не отображаются при пустой таблице. С таблицей KAF все в порядке. В чем дело не пойму. Они ведь идентичны по сути.
Помогите пожалуйста. Может я сошел с ума?)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 23.11.2009, 9:26
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Попробуй вместо "GROUP" написать что-нибудь другое "GRP" например. Может быть БД или Qt думают, что это ключевое слово "GROUP BY". Кстати если так модели каждый раз создавать заново, то у тебя утечка памяти будет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bayah
  опции профиля:
сообщение 23.11.2009, 9:35
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 23.11.2009
Пользователь №: 1249

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




Репутация:   0  


Блин...точно, все из-за GROUP )). Было однажды похожее, точно.
да, точно утечка будет...ну я потом перенесу выделение памяти..это я так пока что, разбираюсь, хоть бы заработала

Сенкс еще раз, а то бы если бы не догадался сам - точно бы с ума сошел)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.11.2009, 10:13
Сообщение #4


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

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

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




Репутация:   94  


Цитата(bayah @ 23.11.2009, 12:35) *
ну я потом перенесу выделение памяти..это я так пока что, разбираюсь, хоть бы заработала
а всего-то надо сделать:
Цитата(bayah @ 23.11.2009, 11:52) *
QSqlTableModel *kaf =new QSqlTableModel(this);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 23.11.2009, 10:21
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(Litkevich Yuriy @ 23.11.2009, 10:13) *
а всего-то надо сделать:

Эти модели будут плодиться при каждом вызове Refresh и удаляться только при разрушении MainForm.
Лучше их руками разрушать в Refresh.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bayah
  опции профиля:
сообщение 23.11.2009, 10:27
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 23.11.2009
Пользователь №: 1249

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




Репутация:   0  


2 Litkevich Yuriy

а я собирался вынести за функцию, это

SqlTableModel *kaf =new QSqlTableModel;


а в функции уже делать так
    kaf->setTable("KAF");
    kaf->select();
    ui->tableView_k->setModel(kaf);


че-то не совсем понятно как работает this? это же указатель объекта на самого себя..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.11.2009, 11:18
Сообщение #7


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

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

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




Репутация:   94  


BRE, да, не обратил внимание.
bayah, родителя всё же не помешает установить, т.к. представление не становится собственником модели.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bayah
  опции профиля:
сообщение 23.11.2009, 13:22
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 23.11.2009
Пользователь №: 1249

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




Репутация:   0  


Litkevich Yuriy, я не особо врубаюсь в эту систему модель/представление. ну QSqlTableModel это экземпляр из множества моделей, тогда представление тут QTableView, я о том вообще?)
Так что значит
Цитата
установить родителя
?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.11.2009, 13:39
Сообщение #9


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

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

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




Репутация:   94  


bayah, это не из оперы "Модель/представление", а из оперы "Объектная модель Qt"
Если ты одному объекту устанавливаешь родителя, то тебе этот объект ненужно удалять руками, т.к. при удалении родителя, он (родитель) удалит своих детей. См. конструктор класса QSqlTableModel, первый аргумент и моё сообщение №4 (использование)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bayah
  опции профиля:
сообщение 23.11.2009, 14:55
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 23.11.2009
Пользователь №: 1249

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




Репутация:   0  


Litkevich Yuriy, а понял.
Вот еще есть такой вопрос. Есть экземпляр QTableView. Как можно узнать количесвто записей(row, верно?)?
Что-то я функции не найду в ассистанте.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 9.12.2023, 23:45