2017-10-27 10 views
0

Qt C++アプリケーションでは、qtablewidgetにいくつかの項目があります。ボタンと一緒にQLineEditが私によって使用され、QTableWidgetを特定の単語が行編集に与えられ、検索ボタンがクリックされたときに検索する。以下は、私のコードです:ワイルドカードを使用して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

==演算子は2つの文字列を比較し、それらがexacly equalsの場合はtrueを返します。 ワイルドカードを使用する場合は、QRegExpを使用し、パターン構文としてQRegExp::Wildcardを使用することをお勧めします。

例1:

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

あなたは文字列が部分文字列を含んでいる場合にのみ、テストしたい場合は、私が速くなることができブールQString::contains(const QString &str, Qt::CaseSensitivity cs)を使用することをお勧めします。

例2:

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

参照:

+0

Thanx実際にワイルドカードを使いたいです! –

関連する問題