使用通配符搜索QTableWidget时出现问题

Issue when searching QTableWidget using wildcards

本文关键字:问题 QTableWidget 通配符 搜索      更新时间:2023-10-16

在我的Qt C++应用程序中,qtablewidget中有几个项。当一个特定单词被赋予行编辑并单击搜索按钮时,我使用QLineEdit和一个按钮来搜索QTableWidget。以下是我的代码:

bool found=false;
QString Line= ui->search->text();
for(int i=0;i<100;i++){
if(ui->tableWidget->item(i,0)->text()== Line){
found = true;
break;
}
}
if(found){
ui->tableWidget->clear();
ui->tableWidget->setItem(0,0,new QTableWidgetItem(Line));
}
else{
QMessageBox::warning(this, tr("Application Name"), tr("The word you are searching does not exist!") );
}

如果表小部件中给出了一个确切的单词,但如果我使用,则此代码有效

ui->tableWidget->item(i,0)->text()=="%"+ Line+"%";

它不适用于通配符场景,这样我就可以搜索一个单词的一部分。如何更正此问题?

==运算符比较两个字符串,如果它们完全相等,则返回true。如果要使用通配符,我建议使用QRegExpQRegExp::Wildcard作为模式语法。

示例1:

QString line = "aaaaLINEbbbb";
QRegExp rx("*LINE*");
rx.setPatternSyntax(QRegExp::Wildcard);
rx.exactMatch(line); //should return true

但是,如果您只想测试字符串是否包含子字符串,我建议使用速度更快的boolQString::contains(const QString &str, Qt::CaseSensitivity cs)

示例2:

QString line = "aaaaLINEbbbb";
QString searchWord = "LINE";
line.contains(searchWord); //should return true

参见:

  • QRegExp
  • QRegExp::模式语法
  • 通配符匹配
  • QString::包含