qt - 如何在 Qt TableView 中实现类似过滤的电子表格?

标签 qt filtering qt5 qtableview

我有一个应用程序已经读取数据并将其放入 TableView 中,因此它看起来或多或少像这样:

enter image description here

我想添加一个类似过滤器的电子表格,例如过滤掉来自特定公司的订单(没有用于过滤的正则表达式/通配 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/

相关文章:

c++ - connect() 找不到信号函数

c++ - 在 QTableView 中用鼠标右键选择

Swift 对数组进行排序并返回索引和元素的数组

matplotlib - Matplotlib 中的透明导航栏(或者,可以在没有栏的情况下添加导航按钮吗?)

linux - Qt中的cmake找不到第三方库,而命令行中的cmake可以

c++ - Qt 线程关联和 moveToThread 问题

c++ - QT中如何检查是否按下了[Shift + Tab]

filtering - 如何根据数据包长度过滤 tcpdump 输出

c++ - 如何在 C++ 中删除数组中小于 X 的整数?

c++ - 动画调整 QListView 的大小