2013-08-22 4 views
0

В моем проекте Qt я использую sql, table view и qsortproxymodel для фильтрации столбцов. Проблема заключается в том, что я могу фильтровать только один столбец. Например, из категории «CATS» и категории «DOGS», i может только фильтровать элементы только для одной из категорий. Я хочу видеть оба предмета, от собак и кошек. Как я могу это сделать?Qt Как я могу фильтровать несколько столбцов?

Мой исходный код:

void Animals::on_comboBox_currentTextChanged(... QString &arg1) // class 
{ 
    ProxyModel->setFilterKeyColumn(3); 
    ProxyModel->setFilterFixedString(ui->combobox->currentText()); 
} 

void Animals::on_comboBox_2_currentTextChange... QString &arg1) // class with letters 
{ 
    ProxyModel->setFilterKeyColumn(4); 
    ProxyModel->setFilterFixedString(ui->combobox_2->currentText()); 
} 

Заранее спасибо

+1

Я думаю, что это не возможно сделать что без подкласса QSortFilterProxyModel –

ответ

3

Вы должны создать подкласс QSortFilterProxyModel и переопределение filterAcceptsRow
пример из Docs:

bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow, 
     const QModelIndex &sourceParent) const 
{ 
    QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); 
    QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent); 
    QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent); 

    return (sourceModel()->data(index0).toString().contains(filterRegExp()) 
      || sourceModel()->data(index1).toString().contains(filterRegExp())) 
      && dateInRange(sourceModel()->data(index2).toDate()); 
} 
Смежные вопросы