如何在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)
它将返回单元格匹配的列表标准
我强烈支持这一点;)事情往往从简单开始,在某种程度上,您不仅使用了其他“暴力”方法,而且可能需要做更多的工作来重新实现模型/视图方法。换句话说:如果一件事是一个过度的(如上面写的)不能在一开始就判断。。。