【问题标题】:Issue when searching QTableWidget using wildcards使用通配符搜索 QTableWidget 时出现问题
【发布时间】:2017-10-27 06:04:20
【问题描述】:

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

它不适用于通配符场景,因此我什至可以搜索某个单词的一部分。我该如何解决这个问题?

【问题讨论】:

    标签: c++ qt search wildcard qlineedit


    【解决方案1】:

    == 运算符比较两个字符串,如果它们完全相等则返回 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 &amp;str, Qt::CaseSensitivity cs) 可以更快。

    示例 2:

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

    见:

    【讨论】:

    • 谢谢我真的想用通配符!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2020-12-01
    • 1970-01-01
    • 2011-09-11
    • 2017-09-16
    • 1970-01-01
    相关资源
    最近更新 更多