Russian Qt Forum

Qt => Model-View (MV) => Тема начата: yashaka от Февраль 03, 2010, 12:24



Название: Update фильтра для промежуточной модели.
Отправлено: yashaka от Февраль 03, 2010, 12:24
Есть такой пример использования промежуточной модели в книге Макса Шлее:
Код:
#include <QtGui>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWidget wgt;

    QStringListModel model;
    model.setStringList(QStringList() << "Xandria"
                        << "Epica"
                        << "Therion"
                        << "Evanescence"
                        << "Nightwish");

    QSortFilterProxyModel proxyModel;
    proxyModel.setSourceModel(&model);
    proxyModel.setFilterWildcard("E*");

    QListView *listView1 = new QListView;
    listView1->setModel(&model);

    QListView *listView2 = new QListView;
    listView2->setModel(&proxyModel);

    //Layout setup
    QHBoxLayout *hbxLayout = new QHBoxLayout;
    hbxLayout->addWidget(listView1);
    hbxLayout->addWidget(listView2);
    wgt.setLayout(hbxLayout);

    wgt.show();

    return app.exec();
}
Так вот, вопрос такой: как обновить фильтрацию даных для listView2, когда в listView1 что-то было отредактировано? Так как сейчас, если даные отредактировать в представлении listView1 то они обновляться и в представлении listView2, но фильтр не переприменяеться...
Сразу возникла идея соединить какой то сигнал для model со слотом для proxyModel, но подходящих не нашел...


Название: Re: Update фильтра для промежуточной модели.
Отправлено: Kolobok от Февраль 03, 2010, 16:52
Еще раз вызвать setFilter...
Такое поведение может поствить пользователя в тупик, если он отредактирует строку и она исчезнет.


Название: Re: Update фильтра для промежуточной модели.
Отправлено: yashaka от Февраль 04, 2010, 10:08
Да, действительно:)
Теперь ясно почему напрямую через существующие сигналы-слоты такой возможности нет...
Выходит, и правда, лучше создать кнопку "обновления", и по сигналу clicked вызывать setFilter.
Спасибо!