2017-10-27 3 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

== 연산자는 두 문자열을 비교하여 같음이면 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

고맙습니다. 실제로 와일드 카드를 사용하고 싶습니다! –

관련 문제