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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: много вьюшек для одной модели - как?  (Прочитано 5789 раз)
ildar
Гость
« : Сентябрь 01, 2009, 16:54 »

скорее всего подобный вопрос уже задавался, но ответа я не нашел

задача такая:

хочется сделать чтобы несколько table-гридов могли отображать данные одной и той же таблицы - так же как в примере tablemodel

плюс к этому хочется сделать возможность фильтрации/сортировки для каждого грида отдельно, т.е. данные одни, а представления разные

если для каждого QTableView создать собственную QSqlTableModel, то теряется возможность синхронизации изменений

если использовать QSortFilterProxyModel для каждого QTableView и связать с единственной QSqlTableModel моделью, то поведение грида некорректно, так как из базы данных выбирается только часть строк которую и сортирует прокси.


поделитесь опытом плиз, а то изобретать велосипед нет желания
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Сентябрь 01, 2009, 16:57 »

Можно сразу загрузить все записи через fetchMore() и навесить прокси для каждой вьюхи.
Записан

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

добавил следущее после model.select()

Код:
while(model.canFetchMore())
        model.fetchMore()


но ничего не изменилось  Непонимающий
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #3 : Сентябрь 02, 2009, 06:15 »

Прокси коннектишь до или после этого? Попробуй после.
Записан

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

было до, попробовал после - не изменилось

вот кусок кода примера tablemodel который я поменял, кроме этого еще изменил коннект к базе чтобы юзать таблицу с 40k строками

Код:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    if (!createConnection())
        return 1;

    QSqlTableModel model;

    initializeModel(&model);

    while(model.canFetchMore())
        model.fetchMore();

    QSortFilterProxyModel filterModel;
    filterModel.setSourceModel(&model);


    QTableView *view1 = createView(QObject::tr("Table Model (View 1)"), &model);
    QTableView *view2 = createView(QObject::tr("Table Model (View 2)"), &filterModel);

    view1->sortByColumn(0, Qt::AscendingOrder);
    view2->sortByColumn(0, Qt::DescendingOrder);

    view1->show();
    view2->move(view1->x() + view1->width() + 20, view1->y());
    view2->show();

    return app.exec();
}


а есть обкатанный вариант не требующий использования fetchMore? насколько я понимаю это не самое оптимальное решение в плане использования ресурсов.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #5 : Сентябрь 02, 2009, 11:29 »

Нужно по прокси на вьюху делать.
Записан

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

уже пробовал, работает

спасибо  Улыбающийся
Записан
ildar
Гость
« Ответ #7 : Сентябрь 02, 2009, 11:57 »

все равно интересно есть ли вариант без использования model.fetchMore() ?

т.е. делать выборку используя SQL WHERE/ORDER BY и синхронизируя изменения. Ведь в любом случае пользователь за один раз изменяет только одну запись и в GUI компоненте надо обновить только видимые строки. Т.о. переложить отвественность за фильтрацию на сервер БД и избавиться от необходимости пробегаться по всей таблице. Вроде бы это должно ускорить работу?!

какие есть идеи?
Записан
ildar
Гость
« Ответ #8 : Сентябрь 02, 2009, 12:06 »

при использовании QSortFilterProxyModel model.fetchMore() необходимо делать после каждого изменения?  Шокированный
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #9 : Сентябрь 02, 2009, 13:23 »

В таком случает только по модели на вьюху.
Записан

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


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