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

时间:2017-10-27 06:04:20

标签: c++ qt search wildcard qlineedit

在我的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+"%";

它不适用于外卡场景,所以我甚至可以搜索一个单词的一部分。我该如何纠正这个问题?

1 个答案:

答案 0 :(得分:1)

==运算符比较两个字符串,如果它们是exacly equals则返回true。 如果您想使用通配符,我建议您使用QRegExp并使用QRegExp::Wildcard作为模式语法。

示例1:

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

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

示例2:

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

请参阅: