Проблема при поиске QTableWidget с использованием подстановочных знаков

В моем приложении 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 ответ

Решение

Оператор == сравнивает две строки и возвращает 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

Увидеть:

Другие вопросы по тегам