我有一个应用程序已经读取数据并将其放入 TableView 中,因此它看起来或多或少像这样:
我想添加一个类似过滤器的电子表格,例如过滤掉来自特定公司的订单(没有用于过滤的正则表达式/通配 rune 本输入字段)。
如何做到这一点?
最佳答案
使用QSortFilterProxyModel
http://qt-project.org/doc/qt-4.8/qsortfilterproxymodel.html
您需要重新实现 bool QSortFilterProxyModel::filterAcceptsRow( int sourceRow );
如果没有看到您的模型,我无法为您提供确切的详细信息,但您重新实现的过滤器将如下所示:
class myFilter : public QSortFilterProxyModel
{
Q_OBJECT
public:
myFilter( QObject* parent = NULL );
virtual ~myFilter();
virtual bool filterAcceptsRow( int sourceRow )
{
const QAbstractTableModel* myModel = dynamic_cast<QAbstractTableModel*>( sourceModel() );
if ( myModel->companyByRowOkay( sourceRow ) {
return true;
}
return false;
}
private:
};
设置如下:
QAbstractTableModel* Model = new QAbstractTableModel();
myFilter* Filter = new myFilter();
QTableView* View = new QTableView();
proxy->setSourceModel( Model );
view->setModel( proxy );
你明白了。通常,QSortFilterProxyModel 位于模型和委托(delegate)之间,因此如果您直接从委托(delegate)与模型对话,则需要记住这一点,因为索引会有所不同。
编辑:还要阅读何时在 QSortFilterProxyModel 中调用 invalidate() ,否则你可能会抓狂。
关于qt - 如何在 Qt TableView 中实现类似过滤的电子表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26475973/