在我的应用程序中,我有QtableWidget
显示多行,行编辑输入字符串和按钮,需要说明点击按钮相同QTableWidget
应该只显示那些输入字符串的行行编辑。
我考虑过使用QSortFilterProxy
模型,但QTableWidget
将setModel(...)
方法设为私有,因此在这种情况下我无法使用QSortFilterProxy
模型。请告诉我如何在QTable Widget中实现Filter选项
答案 0 :(得分:17)
无论如何,使用排序/过滤器代理可能有点过头了。
这是迭代所有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 );
}
答案 1 :(得分:16)
我强烈建议以下列方式进行此操作!这就是它在Qt中的意图。
查看tutorial on Qt Model/View Programming。问题是QTableWidget是一个方便的类,可以为你隐藏Model / View的东西。在您的情况下,您不能(或不应该)忽略Qt提供的模型/视图结构。
您需要做什么:
QTableView
代替QTableWidget
。QAbstractItemModel
并实施data()
(用于阅读),以及documentation所需的所有其他功能。这是最棘手的部分,但请参阅上面的链接,了解如何执行此操作。QSortFilterProxyModel
创建setModel()
和QTableView
。setSourceModel()
您的QSortFilterProxyModel
到您的子模型。setFilterFixedString()
setFilterRegExp()
或QSortFilterProxyModel
设置要过滤的字符串
醇>
如果这有帮助,请告诉我。从长远来看,这是更专业,更优雅,而不是遍历表格中的所有元素。