使用通配符搜索 QTableWidget 时出现问题
Issue when searching QTableWidget using wildcards
在我的 Qt C++ 应用程序中,我在 qtable 小部件中有几个项目。我使用 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!") );
}
如果在 table 小部件中给出了一个确切的词,但如果我使用
,则此代码有效
ui->tableWidget->item(i,0)->text()=="%"+ Line+"%";
它不适用于通配符场景,因此即使给出了部分单词我也可以搜索。我该如何解决这个问题?
== 运算符比较两个字符串,return 如果它们完全相等则为真。
如果你想使用通配符,我建议使用 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
参见:
在我的 Qt C++ 应用程序中,我在 qtable 小部件中有几个项目。我使用 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!") );
}
如果在 table 小部件中给出了一个确切的词,但如果我使用
,则此代码有效ui->tableWidget->item(i,0)->text()=="%"+ Line+"%";
它不适用于通配符场景,因此即使给出了部分单词我也可以搜索。我该如何解决这个问题?
== 运算符比较两个字符串,return 如果它们完全相等则为真。
如果你想使用通配符,我建议使用 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
参见: