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