2013-11-28 5 views
1

В настоящее время у меня есть кнопка поиска, и я бы хотел поискать конкретный столбец моей модели. Поэтому просто хочу, чтобы соответствующие строки отображались в моем представлении таблицы. Я добавил объект QSortFilterProxyModel * в качестве источника в представление таблицы и установил в качестве источника QStandardItemModel *. Затем с помощью кнопки поиска я сделал следующее соединение:QSortFilterProxyModel и слот setFilterFixedString

QObject::connect(ui.lineEditSearch,SIGNAL(textChanged(QString)),proxyModelFilter,SLOT(setFilterFixedString(QString))); 

Теперь у меня создалось впечатление, что после ввода соответствующих строк будут возвращены. Затем я понял, что я не указал, какие столбцы я хочу, чтобы прокси-модель фильтра выполняла поиск. Я понимаю, что я мог бы реализовать класс, наследующий от QSortFilterProxyModel, и повторно реализовать его filterAcceptsRow. Я хотел знать, есть ли способ избежать создания класса, который наследуется от QSortFilterProxyModel, и просто использовать класс QSortFilterProxyModel только для того, чтобы указать, какие столбцы следует искать, когда вызывается Slot setFilterFixedString?

+2

'filterKeyColumn' позволяет вам искать один столбец или все (-1) (http://qt-project.org/doc/qt-5.1/qtcore/qsortfilterproxymodel.html#filterKeyColumn-prop) Это то, что вам нужно, или вам нужны несколько, но не все столбцы? Думаю, тогда вам придется подкласс. –

+0

Мне просто нужно найти один столбец, и если это ключевое слово найдено, тогда отобразите соответствующие строки. – Rajeshwar

+0

. Что сделал трюк, вы могли бы поставить это как ответ. Поэтому я мог бы отметить его – Rajeshwar

ответ

2

Столбец для фильтрации по может быть установлен через QSortFilterProxyModel::filterKeyColumn. Он позволяет указать один столбец или все из них (-1, значение по умолчанию).

В качестве альтернативы можно определить собственную роль фильтра, возвращающую конкатенацию всей строки для поиска, и установить ее через setFilterRole().

Смежные вопросы