Russian Qt Forum

Qt => Общие вопросы => Тема начата: Lion от Март 08, 2007, 09:47



Название: Проблемы с QSortFilterProxyModel
Отправлено: Lion от Март 08, 2007, 09:47
У меня есть модель, которая нормально работает с QTreeView, но если её пропустить через QSortFilterProxyModel, то в представлении ничего не появляется, а при выходе из программы вылезает ошибка. При этом если ту же модель пропустить через QProxyModel, то все работает нормально. У кого нибудь есть соображения по этому поводу?


Название: Проблемы с QSortFilterProxyModel
Отправлено: Alexei от Март 08, 2007, 14:25
Напиши, пожалуйста, каким образом используешь QSortFilterProxyModel. Возможно, это поможет разобраться.


Название: Проблемы с QSortFilterProxyModel
Отправлено: Lion от Март 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, там вроде много исправлений в этом классе.


Название: Проблемы с QSortFilterProxyModel
Отправлено: Alexei от Март 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();
}


Название: Проблемы с QSortFilterProxyModel
Отправлено: Lion от Март 12, 2007, 00:37
view.setModel(model); - Прокси модель не используется!
Замени на - view.setModel(proxy);