crossplatform.ru

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

512es
  опции профиля:
сообщение 3.11.2009, 10:56
Сообщение #1


Участник
**

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

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




Репутация:   0  


Всем привет!
Помогите заставить работать QTableView & QSqlTableModel как надо. Может кто уже сталкивался с такой проблемой..

Модель таблицы:
modell = new QSqlTableModel;
modell->setTable("clients");
modell->setEditStrategy(QSqlTableModel::OnFieldChange);
modell->select();
setModel(modell);


Добавляю новую запись:
int row = modell->rowCount();
modell->insertRow(row);
QModelIndex index = modell->index(row, 1);
setCurrentIndex(index);
edit(index);

Вот так, после добавления записи, курсор переходит на нужную строку и ячейка в режиме редактирования.

Проблема:
Но стоит только нажать интер, строка записывается в базу и таблица обновляется. Курсор переходит на первую строку.
Кроме того, записей в таблице много и подгружаются они не все. Что мешает функции поиска по таблице.

Должно работать так:
Добавляем строку, она сразу сабмитится в базу с дефолтными значениями. Курсор переходит на добавленную строку и сразу в режим редактирования. При редактировании ячеек, курсор остаётся на той же строке, а не убегает в начало. Таблица подгружается вся, а не часть её, дабы работал быстрый поиск по всей таблице.

Как я делаю:
Подгружаю таблицу целиком вот так:
while (modell->canFetchMore()) modell->fetchMore();
setFocus();


Дефолтные значения задаю так:
connect(modell,SIGNAL(primeInsert(int,QSqlRecord &)),this,SLOT(slotPrimeIns(int,QSqlRecord &)));
...
void CliView::slotPrimeIns(int row, QSqlRecord &record)
{
    record.setValue(4,0);
    ...
}


Сообщение отредактировал 512es - 5.11.2009, 22:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 3.11.2009, 16:51
Сообщение #2


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

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

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




Репутация:   94  


512es,
Цитата(512es @ 3.11.2009, 13:56) *
записей в таблице много и подгружаются они не все.
Цитата(512es @ 3.11.2009, 13:56) *
Таблица подгружается вся, а не часть её, дабы работал быстрый поиск по всей таблице.
неверное рассуждение. Для понимания зададимся цифрами:
В таблице 400 миллионов строк, для обеспечения быстрого поиска используется СУБД, это её основное предназначение. Следовательно подгружаем только то, что нужно держать под рукой, как это делает Qt. Для БЫСТРОГО поиска используем запросы к БД.

Цитата(512es @ 3.11.2009, 13:56) *
Добавляем строку, она сразу сабмитится в базу с дефолтными значениями.
можно по выделыватся с делегатами, но проще будет создать свою модель. Тем более, что предыдущий пункт о поиске наталкивает на мысль о наследовании от QSqlQueryModel.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 18.2.2025, 11:02