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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с QSortFilterProxyModel  (Прочитано 4595 раз)
Lion
Гость
« : Март 08, 2007, 09:47 »

У меня есть модель, которая нормально работает с QTreeView, но если её пропустить через QSortFilterProxyModel, то в представлении ничего не появляется, а при выходе из программы вылезает ошибка. При этом если ту же модель пропустить через QProxyModel, то все работает нормально. У кого нибудь есть соображения по этому поводу?
Записан
Alexei
Гость
« Ответ #1 : Март 08, 2007, 14:25 »

Напиши, пожалуйста, каким образом используешь QSortFilterProxyModel. Возможно, это поможет разобраться.
Записан
Lion
Гость
« Ответ #2 : Март 08, 2007, 19:05 »

После небольших изменений в simpletreemodel получаем следующее:

Работающий вариант:
Код:

#include <QtGui>
#include <QSortFilterProxyModel>

#include "treemodel.h"

int main(int argc, char *argv[])
{
    Q_INIT_RESOURCE(simpletreemodel);

    QApplication app(argc, argv);

    TreeModel *model = new TreeModel();

    QSortFilterProxyModel *proxy = new QSortFilterProxyModel(0);
    proxy->setDynamicSortFilter(true);
    proxy->setSourceModel(model);

    QTreeView view;
    view.setWindowTitle(QObject::tr("Simple Tree Model"));
    view.show();
   
    QFile file(":/default.txt");
    file.open(QIODevice::ReadOnly);

    model->setupModelData(QString(file.readAll()).split(QString("\n")),model->getRootItem());
    view.setModel(proxy);

    file.close();
    return app.exec();
}


Меняем местами две строчки и в представлении ничего нет:
Код:

    view.setModel(proxy);
    model->setupModelData(QString(file.readAll()).split(QString("\n")),model->getRootItem());


А вот так все работает:
Код:

    view.setModel(model);
    model->setupModelData(QString(file.readAll()).split(QString("\n")),model->getRootItem());


Явно бага в QSortFilterProxyModel, будеи ждать 4.2.3, там вроде много исправлений в этом классе.
Записан
Alexei
Гость
« Ответ #3 : Март 08, 2007, 21:08 »

Странно, у меня вот так работает:

Код:
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QStandardItemModel *model = new QStandardItemModel();
    QSortFilterProxyModel* proxy = new QSortFilterProxyModel(0);
    proxy->setDynamicSortFilter(true);
    proxy->setSourceModel(model);
    QTreeView view;
    view.setWindowTitle("Simple Tree Model");
    view.show();
   
    view.setModel(model);

    //заполняем модель
    model->insertColumns(0, 1);
    model->insertRows(0, 3);
    model->setData(model->index(0, 0), "1");
    model->setData(model->index(1, 0), "2");
    model->setData(model->index(2, 0), "3");

    return app.exec();
}
Записан
Lion
Гость
« Ответ #4 : Март 12, 2007, 00:37 »

view.setModel(model); - Прокси модель не используется!
Замени на - view.setModel(proxy);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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