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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Помощь по model\view  (Прочитано 10190 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Октябрь 11, 2007, 11:26 »

   Только не отсылайте меня сразу в ассистент, его я читал, но не
помогло. Просто очень трудно понять данную технологию. В общем такая
задача:
1. Есть БД с таблицей, в которой 7 полей.
2. Создаю QSqlQueryModel и соединяюсь SELECT * FROM table
3. Создаю QTableView и подключаю к нему модель.
4. Редактирую данные через дополнительное окно и после добавления опять
делю в модели SELECT * FROM table
Теперь трудности:
1. Как установить курсор на последнюю запись?
2. Как установить курсор на нужную запись (при редактировании)?
3. Нужно ли каждый раз после изменений обновлять всю модель?
4. Как вообще правильно работать с model\view???
   Буду рад любой помощи.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Alexandr Az
Гость
« Ответ #1 : Октябрь 11, 2007, 12:52 »

Цитировать
Теперь трудности:
1. Как установить курсор на последнюю запись?
Модель не знает о вью, следовательно устанавливать на последнюю запись нужно во вью
view.setCurrentIndex(Индекс), где индекс  можно взять с модели. Но смотря что ты имеешь в виду под последней записью.
Ведь модель считывает не все записи сразу, а по мере продвижения по модели (скажем так - пакетами)....
Цитировать
2. Как установить курсор на нужную запись (при редактировании)?
Но вопрос я не понял. Если нужно на нужную запись при редактировании - так юзвер сам поставит....
Вообще смотри view.selectionModel ()
Цитировать
3. Нужно ли каждый раз после изменений обновлять всю модель?
К сожалению да.
Вообще скажи версию QT. В последних он обновляет сам (т.е. обновления для тебя происходят неявно)
 Жди релизы, мож изменят. Что то уже слышал про нотификацию в новом куте......
Или пиши сам свою модель...
Или в модели поставь кеширование данных.... (тогда нужно принудительно сказать об обновлении)

Цитировать
4. Как вообще правильно работать с model\view???
   Буду рад любой помощи.
да там в принципе не правильно работать сложно......
Другими словами модель - вью sql  - это недоработанная до ужаса вещь, пилять щас напильником не вижу смысла, потому как qt
постоянно дополняет её новыми возможностями. Плохо конечно, что мы не знаем конечную цель.............

Записан
UVV
Гость
« Ответ #2 : Октябрь 11, 2007, 16:06 »

потому как qt
постоянно дополняет её новыми возможностями. Плохо конечно, что мы не знаем конечную цель.............
Вы имеете ввиду, что программирование на qt вещь далеко не идеальная?
Записан
Alexandr Az
Гость
« Ответ #3 : Октябрь 11, 2007, 16:28 »

Цитировать

Вы имеете ввиду, что программирование на qt вещь далеко не идеальная?

Я имею в виду, что мы не знаем планов QT относительно развития модуля SQL. Единственное что я слышал про планы - это типа крутая поддержка многопоточности.  Те, кто серьёзно хочет девелопить на SQL прийдётся свои модели писать, а может даже и дрова. Если бы знать, скажем, что во II квартале они сделают нормальную модель, с тем то тем то, было бы легче...

Возьмите КДЕ... Начали они его писАть на бете 4-й... И что. Последняя версия содержит столько дополнений, что многое из того,  что кдешники сами накалякали можно выбросить (я конечно с ними не знаком, но мне кажется дела обстоят именно так). А все из за того, что не говорят, что будет в будущем....
Записан
ритт
Гость
« Ответ #4 : Октябрь 11, 2007, 17:10 »

частично согласен с Александром (Аз)
частично, потому как часть того, что накалякали кдешники, попозжа входит в состав родного функционала кутэ
получается крговорит кода в природе: тролли написали; кде доработали, написали костыли и новый функционал; тролли посмотрели - красиво, хорошо, удобно - вынесли данные наработки в кутэ; и т.д.
так уже было не раз и так ещё будет...

то, что у снапшотов нет ченджлога и туду на грядущую мажорную версию, усложняет нам жизнь. частенько приходится писать что-нибудь своё, чтобы с выходом мажорной версии удалить этот код к богам...

тем не менее, работать с троллями (кутэ) гораздо удобнее, чем, например, с дотнетом - тролли, по-крайней мере, прислушиваются к девелоперам и реально правят баги и добавляют функционал из трекера
Записан
dilshodm
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #5 : Октябрь 11, 2007, 17:50 »

Теперь трудности:
1. Как установить курсор на последнюю запись?
2. Как установить курсор на нужную запись (при редактировании)?
3. Нужно ли каждый раз после изменений обновлять всю модель?
4. Как вообще правильно работать с model\view???
   Буду рад любой помощи.


1. Чтобы найти последнюю введенную запись я применял след. метод (конечно через ж.., но другого метода не нашел):
Код:
после (SELECT) или submitAll() делаю
QSqlQuery q = model->query();
int id = q.lastInsertId().toInt();

А дальше этот id ищу в таблице (id - это ключ) и нужную строку выделяю через view->selectRow(...)

Вообще QSqlQueryModel скорее предназначена для чтения (показа) результатов, а для редактирования удобнее будет работать с QSqlTableModel.
Там можно задавать кешировать или нет результаты. А сохранять через model->submitAll().
После submitAll() происходит сброс текущего курсора, поэтому приходится отыскивать id как я указывал выше и делать selectRow().
Записан

С уважением,
Dilshod
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Октябрь 11, 2007, 18:10 »

Спасибо всем за ответы.
Как вы могли заметить в моих вопросах, модель я использую только для показа, т.к. редактирование/добавление провожу через другие окна.
dilshodm, с нахождением id последней записи проблем нет, проблема в другом - я не знаю как найти во вьюхе/модели строку, которая мне нужна (по заданному id).
Кутя у меня 4.3.2. С птицей тоже есть оповещение об изменениях, или только с SQLite?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
dilshodm
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #7 : Октябрь 11, 2007, 18:44 »

Честно говоря не понял о каких оповещениях идет речь.
Если о lastInsertId, то надо проверить QSqlDriver::hasFeature(QSqlDriver::LastInsertId) на птице.

Насчет поиска.
Сам не пробовал, но думаю следующее должно сработать
Код:
int row = model->match(model->index(0, idColumn), Qt::DisplayRole, id).at(0).row();

Затем номер этой строки можно указывать в selectRow()
« Последнее редактирование: Октябрь 11, 2007, 18:47 от dilshodm » Записан

С уважением,
Dilshod
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Октябрь 11, 2007, 19:00 »

Спасибо. Завтра буду пробовать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ритт
Гость
« Ответ #9 : Октябрь 11, 2007, 19:12 »

LastInsertId тру у всех драйверов, кроме одбц
Записан
orefkov
Гость
« Ответ #10 : Октябрь 12, 2007, 07:53 »

Другими словами модель - вью sql  - это недоработанная до ужаса вещь, пилять щас напильником не вижу смысла, потому как qt
постоянно дополняет её новыми возможностями. Плохо конечно, что мы не знаем конечную цель.............
Вот как это точно. Вещь, совершенно не приспособленная для реальной работы.
Да и вообще в дизайне модель-вью у кутэ не без кривизны.
Записан
ритт
Гость
« Ответ #11 : Октябрь 12, 2007, 08:13 »

Вот как это точно. Вещь, совершенно не приспособленная для реальной работы.
Да и вообще в дизайне модель-вью у кутэ не без кривизны.

именно! для реальной работы никакая!
а мы тут просто поделки собираем и плюшками балуемся Грустный
если что-то приходится дорабатывать (или мириться с недоработками), это ещё не означает, что вещь - говно!
Записан
orefkov
Гость
« Ответ #12 : Октябрь 12, 2007, 08:22 »

а мы тут просто поделки собираем и плюшками балуемся Грустный
если что-то приходится дорабатывать (или мириться с недоработками), это ещё не означает, что вещь - говно!
Ну, ну, спокойнее.
Какашками в QT бросатся отнюдь не собираюсь, мне она очень даже нравится.
Просто хочу сказать, что да, действительно, кое-что надо дорабатывать напильником.
И естественно, кое-что делать совсем самому.
Записан
ритт
Гость
« Ответ #13 : Октябрь 12, 2007, 08:56 »

а где - нет?
Записан
orefkov
Гость
« Ответ #14 : Октябрь 12, 2007, 09:07 »

Да нигде. В 1Се наверное только Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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