![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Stanislaus |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Столкнулся тут с неким багом(?). Сделал обработчик сигнала doublrClicked для QTableView:
Сам слот:
Коннекшн:
Когда я открываю даблкликом документы перемещаясь по строкам вниз QTableView, все нормально, но, как только я начинаю перемещаться с нижних строк на верхние, он открывает предыдущий нижний документ (последний scripts_query.value(1) == предыдущему scripts_query.value(1)), хотя вью и модель изменились. У меня Qt GPL 4.3.4, скомпилированная Visual C++ 2008 Express Edition, h-ки и библиотеки для PSQL от PostgreSQL 8.3.1. Хочу добавить, что под X11 все пашет идеально. Короче застрял, если нужны какие-нибудь дополнительные данные, сообщите. Сообщение отредактировал Stanislaus - 23.4.2008, 16:43 |
|
|
![]() |
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Я ни как не могу понять, как ты получаешь свою позицию в QTableView?
const QModelIndex &index не задействован... |
|
|
Stanislaus |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Дело в том, что const QModelIndex &index - индекс модели и мне он не интересен, т.к. столбец с ID я от туда все равно удалил. Единственное место где я его могу получить - QSqlQuery, который лежит в основе модели. А в обязанности модели входит управление указателем на текущую запись QSqlQuery (query.record()) и я этим пользуюсь, но, как выяснилось, под Win32 это не очень стабильно работает. Либо View, либо Controller где-то портят всю эту цепочку.
Сообщение отредактировал Stanislaus - 23.4.2008, 17:01 |
|
|
ViGOur |
![]()
Сообщение
#4
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
но, как выяснилось, под Win32 это не очень стабильно работает. Либо View, либо Controller где-то портят всю эту цепочку. Именно так.Мне кажется ты не до конца понимаешь, что такое модельные индексы, так как модели как я понимаю фиалетово, есть у тебя "столбец с ID" или нет. Модельные индексы. |
|
|
Stanislaus |
![]()
Сообщение
#5
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вот собсно запрос к базе:
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
индекс модели и поле ID связаны лишь косвенно, что у тебя за модель то вообще? QSqlQueryModel?
|
|
|
Stanislaus |
![]()
Сообщение
#7
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Stanislaus |
![]()
Сообщение
#8
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Короче вот так, заменил:
на
т.к. полюбому мне нужен query, что бы иметь доступ к полю "id"... но соответственно напоролся на cannot use 'dynamic_cast' to convert from 'const QAbstractItemModel *' to 'QSqlQueryModel *'... Насколько я помню, все изменения в Model (в котором я это поля удалил, чтобы оно во View не появилось) не затрагивают лежащие в основе данные (в данном случае QSqlQuery). Например, есть у меня 5 кортежей данных (и соответственно 5 строк во View).
В QTableView следующее:
Например, открываю я 1 запись, CMN::DEBUG: index.row() == 0, scripts_query.record().value("id").toInt() == 12, Good спускаюсь ниже, открываю 3 запись, PN::ATOMOHOST: index.row() == 2, scripts_query.record().value("id").toInt() == 34, Good спускаюсь еще ниже, открываю 4 запись, U3::TASKBAR: index.row() == 3, scripts_query.record().value("id").toInt() == 45, Good теперь хочу подняться наверх и открываю 2 запись, CORP::CHECK_ICQ: index.row() == 1, scripts_query.record().value("id").toInt() == 45, Ooops, модель забыла перевести стрелки... поднимаюсь еще наверх, открываю 1 запись, CMN::DEBUG: index.row() == 0, scripts_query.record().value("id").toInt() == 21, Ooops, указывает на id предыдущей записи... типа квантовый скачок в прошлое спускаюсь к 4 записи, U3::TASKBAR: index.row() == 3, scripts_query.record().value("id").toInt() == 45, Good, указывает на верный id опять... индекс модели всегда верный, но при смене направлениявниз-вверх происходит вот такая лажа... |
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Stanislaus |
![]()
Сообщение
#10
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
QSqlQuery - данные, которыми управляет QSqlQueryModel согласно MVC. Меняются данные, оповещаются все вью. Меняются вью, изменяются данные посредством QSqlQueryModel и опять оповещаются все вью. А перемещение селекшена, на мой взгляд - изменение вью. Просто если эта реализация нормально работает на одной платформе (X11) и работает коряво на другой (Win32), не стоит ли это считать багом?
Просто, если бы кто-нибуть посоветовал мне, как мне изъять заветный "id" без обращения к QSqlQuery и что-бы этот самый "id" не светился во вью, я был бы бесконечно благодарен. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.6.2025, 7:47 |