QSortFilterProxyModel не обновляет QTableview - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь использовать QSortFilterProxyModel с QStandardItemmodel, но filterAcceptedRows () не обновляет представление.

Строки правильно отфильтрованы в функции filterAcceptedRows (), но представление не обновлено.Он по-прежнему отображает все строки.Ниже вы можете найти код, который я уже пробовал, может кто-нибудь сказать мне, что я что-то упустил здесь

Это код в QDialog.

m_modelApp = new QStandardItemModel();
m_proxyApp = new ProxyModelApp();
m_proxyApp->setSourceModel(m_modelApp);
m_lstApp->setModel(m_modelApp);

Вот как я добавляю данныек модели.

    QStandardItem *item1 = new QStandardItem();
    QStandardItem *item2 = new QStandardItem();
    QStandardItem *item3 = new QStandardItem();
    QStandardItem *item4 = new QStandardItem();
    QStandardItem *item5 = new QStandardItem();
    QStandardItem *itemCheck = new QStandardItem();

    item1->setData(l_sRefProduitSW,Qt::DisplayRole);
    item2->setData("To Define",Qt::DisplayRole);
    item3->setData(app.GetRefApp(),Qt::DisplayRole);
    item4->setData(app.GetRefIdentApp(),Qt::DisplayRole);
    item5->setData(app.GetRefFNRApp(),Qt::DisplayRole);

    itemCheck->setCheckable(true);
    if(m_xRefBe->GetListeAppBE().contains(app))
        itemCheck->setCheckState(Qt::Checked);
    else
        itemCheck->setCheckState(Qt::Unchecked);

    listItems<<itemCheck<<item1<<item2<<item3<<item4<<item5;
    m_modelApp->appendRow(listItems);

Один из фильтров в ProxyModelApp.

void ProxyModelApp::setRefLibApp(QString refLibApp){
    if(m_refLibApp != refLibApp)
        m_refLibApp = refLibApp;
    invalidateFilter();
}

Хотелось бы узнать, почему после успешной фильтрации функция filterAcceptedRows () не обновляетсямнение.

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Ваша модель прокси таблицы должна быть инициализирована в следующем порядке

m_modelApp = new QStandardItemModel();  // Original model
m_proxyApp = new ProxyModelApp();       // Custome proxy model
m_proxyApp->setSourceModel(m_modelApp); // Proxy to original model.
m_lstApp->setModel(m_proxyApp);         // Set the proxy model to the table view
1 голос
/ 02 апреля 2019

У вас есть вид использования m_modelApp - оригинальная нефильтрованная модель. Вы создали m_proxyApp, но фактически нигде его не используете.

...