Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在QTableWidget中设置过滤器选项_Qt - Fatal编程技术网

如何在QTableWidget中设置过滤器选项

如何在QTableWidget中设置过滤器选项,qt,Qt,在我的应用程序中,我有QtableWidget显示多行,行编辑以输入字符串和按钮,要求单击按钮时,相同的QtableWidget应仅显示那些将字符串输入行编辑的行 我曾想过使用QSortFilterProxy模型,但QTableWidget具有setModel(…)私有方法,因此在这种情况下我无法使用QSortFilterProxy模型。请告诉我如何在QTable小部件中实现Filter选项,无论如何,使用排序/筛选代理可能是过分了 这是一个迭代所有QTableWidgetItem对象的问题,确

在我的应用程序中,我有
QtableWidget
显示多行,行编辑以输入字符串和按钮,要求单击按钮时,相同的
QtableWidget
应仅显示那些将字符串输入行编辑的行


我曾想过使用
QSortFilterProxy
模型,但
QTableWidget
具有
setModel(…)
私有方法,因此在这种情况下我无法使用
QSortFilterProxy
模型。请告诉我如何在QTable小部件中实现Filter选项

,无论如何,使用排序/筛选代理可能是过分了

这是一个迭代所有QTableWidgetItem对象的问题,确定它们的文本是否与筛选器匹配,并根据需要调用QTableView::setRowHidden()

例如:

QString filter = textEdit->text();
for( int i = 0; i < table->rowCount(); ++i )
{
    bool match = false;
    for( int j = 0; j < table->columnCount(); ++j )
    {
        QTableWidgetItem *item = table->item( i, j );
        if( item->text().contains(filter) )
        {
            match = true;
            break;
        }
    }
    table->setRowHidden( i, !match );
}
QString过滤器=文本编辑->文本();
对于(int i=0;irowCount();++i)
{
布尔匹配=假;
对于(int j=0;jcolumnCount();++j)
{
QTableWidgetItem*item=表格->项目(i,j);
如果(项->文本().包含(筛选器))
{
匹配=真;
打破
}
}
表->设置行隐藏(i,!匹配);
}

我强烈建议您按照以下方式进行操作!这就是在Qt中要做的事情

看这张照片。问题在于QTableWidget是一个方便的类,它为您隐藏了模型/视图内容。在您的情况下,您不能(或不应该)忽略Qt提供的模型/视图结构

您需要做的是:

  • 使用
    QTableView
    而不是
    QTableWidget
  • 子类
    qabstractemodel
    并实现
    data()
    (用于读取),以及从中需要的所有其他函数。这是最棘手的部分,但请参考上面的链接了解如何执行此操作
  • 为其创建
    QTableView
    QSortFilterProxyModel
    setModel()
  • QSortFilterProxyModel
    setSourceModel()
    设置为子类模型
  • QSortFilterProxyModel

  • 让我知道这是否有帮助。从长远来看,这比遍历表中的所有元素更专业、更优雅。

    您能给我一些示例代码,以便我了解您的方法吗?首先感谢您,我的想法可能是这样的:或者,我们可以简单地使用
    QTableWidget.findItems(criteria,Qt.MatchContains)
    它将返回单元格匹配的列表
    标准
    我强烈支持这一点;)事情往往从简单开始,在某种程度上,您不仅使用了其他“暴力”方法,而且可能需要做更多的工作来重新实现模型/视图方法。换句话说:如果一件事是一个过度的(如上面写的)不能在一开始就判断。。。