Название: как правильно организовать работу с SQLite? Отправлено: bebabo от Сентябрь 10, 2008, 11:51 всем привет! изучаю работу в Qt с SQLite и есть несколько вопросов.
в общем, реализую следующее - есть база данных, в которой две таблицы - customers и trash. обе таблицы хранят одинаковые структуры с тем только отличием, что в первой - текущие заказчики, а во вторую помещаются те, которых удалили (для возможности восстановить). таблицы привязаны к двум QTableView - сur_cust и trash_cust. при двойном клике на строке сur_cust открывается форма для редактирования данных заказчика, с возможностью удаления. в данный момент последнее реализовано у меня следующим образом: Код: customerform *page = (customerform*) ui.tabWidget->currentWidget(); можно ли реализовать все это красивее?) и как после изменений таблиц обновить QTableView? только лишь переподключением модели, или есть другой способ? Название: Re: как правильно организовать работу с SQLite? Отправлено: lit-uriy от Сентябрь 10, 2008, 12:38 Цитировать две таблицы - customers и trash. обе таблицы хранят одинаковые структуры с тем только отличием, что в первой - текущие заказчики, а во вторую помещаются те, которых удалили Лучше сделать одну таблицу, + одно поле (0-неактивный заказчик, 1-активный заказчик)Цитировать как после изменений таблиц обновить QTableView? лучше использовать QDataWidgetMapper (http://crossplatform.ru/documentation/qtdoc4.3/qtsql.php#creating-data-aware-forms) для диалога настройки, тогда все будет обновлятся самоНазвание: Re: как правильно организовать работу с SQLite? Отправлено: bebabo от Сентябрь 10, 2008, 14:35 спасибо за подсказку про QDataWidgetMapper (как-то я это пропустил)!
а насчет хранения всего в одной таблице - сначала так и хотел сделать, но остановил вот какой момент - получается, что при заполнении QTableView активных заказчиков (и при каждом ее обновлении), мне придется фильтровать неактивных, тогда как сейчас я просто назначаю одну таблицу одной вьюшке, другую - второй вьюшке. Название: Re: как правильно организовать работу с SQLite? Отправлено: ритт от Сентябрь 10, 2008, 15:14 > одну таблицу одной вьюшке, другую - второй вьюшке.
ну и глупо. вдвойне глупо доказывать, что так лучше :) 1) делаешь таблицу, например: id | name | active 2) натравливаешь на эту таблицу QSqlTableView 3) наследуешься от QSortFilterProxyModel и добавляешь enum MyFilter { ShowAll, ShowAciveOnly, ShowInactiveOnly }; и свойство MyFilter myFilter. 3.1) для каждого состояния свойства myFilter определяешь логику фильтрации (тупо myFilter == ShowAciveOnly && data(...).toBool()) 3.2) скрываешь столец "active" модели-источника посредством filterAcceptsColumn 4) навешиваешь экземпляр QSqlTableView источником экземпляра твоей прокси с фильтром ShowAciveOnly, а эту проскю скармливаешь вьюхе 5) навешиваешь всё тот же экземпляр QSqlTableView источником второго экземпляра твоей прокси с фильтром ShowInaciveOnly, а эту вторую проскю скармливаешь второй вьюхе а когда прикрутишь ещё и QDataWidgetMapper, тебе вообще ничего не потребуется делать, т.к. QDataWidgetMapper::submit() будет через любую проксю звать QSqlTableView::submit(), в ктором выполняется перевыбор данных при успешной отправке - прокси автоматически подхватят изменения а вьюхи отобразят содержимое, полученное через прокси в конце-концов, ты на Qt пишешь, а не на вижуалвасике - так не уподобляйся всяческому отрёбью! Название: Re: как правильно организовать работу с SQLite? Отправлено: bebabo от Сентябрь 11, 2008, 10:15 Константин, огромное спасибо! разобрался вчера с QSortFilterProxyModel - просто волшебная штука)
еще раз спасибо за ваш коммент) |