Qt QString::compare返回0,即使两个字符串不同

Qt QString::compare返回0,即使两个字符串不同,qt,qstring,Qt,Qstring,当我提供QString::与两个字符串进行比较时: for(int i = 0; i < ui->tableWidget->rowCount(); i++ { // assuming searchDialog is a custom-made class with method getResultMap QMap<QString, int> result = searchDialog->getResultMap(); QString p

当我提供QString::与两个字符串进行比较时:

for(int i = 0; i < ui->tableWidget->rowCount(); i++
{
    // assuming searchDialog is a custom-made class with method getResultMap
    QMap<QString, int> result = searchDialog->getResultMap();
    QString phrase = result.keys().at(0);
    int itemFound = 1;    

    if(itemFound == QString::compare(ui->tableWidget->item(i, searchByColumn)->text(),  
                                                       phrase, 
                                                       Qt::CaseInsensitive)) == 0)
    {
         // Enters here even though the strings differ
    }
}
但是,当我这样做时:

if(ui->tableWidget->item(i, searchByColumn)->text() == phrase)
{
    qDebug() << "Entered the condition";
}
if(ui->tableWidget->item(i,searchByColumn)->text()==短语)
{

qDebug()您的问题有点不清楚。在第一个代码示例中,
i
来自何处?为什么我们应该期望条件的计算结果为true?您可以在
if
语句中解释您打算通过条件实现的行为吗?我希望避免添加太多的代码行。i是遍历的int变量s tableWidget逐行:for(int i=0;itableWidget->rowCount();i++)。就条件而言,我想检查字符串是否不同(如预期的那样),或者在获取QString时是否有错误。因为“输入了条件”仅在相同行的情况下显示,而QStrings::compare方法有问题。抱歉,但这并不能说明问题更清楚。从我看到的情况来看,您将表格单元格的内容与某个变量
短语
(相当于QString)进行比较.现在,我们没有任何关于正在比较的字符串的值的信息,那么我们应该如何得出任何结论呢?但是,我假设条件
if(itemfund==QString::compare(ui->tableWidget->item(I,searchByColumn)->text(),phrase,Qt::case不敏感))==0)
可能没有真正做到你认为它应该做的事情,因此如果你能解释一下你认为它应该做什么,这会有所帮助。短语是一个QString类型的类字段。我更新了一点帖子。也许它现在更有意义了。是的,它做到了。这就是
QString::compare(ui->tableWidget->item部分的内容(i,searchByColumn)->条件检查的text(),phrase,Qt::CaseSensitive)==0
。如果此比较的结果为真,则字符串相等。在原始示例中,由于第二次比较中缺少偏旁,因此将其与
1
进行比较。
if(ui->tableWidget->item(i, searchByColumn)->text() == phrase)
{
    qDebug() << "Entered the condition";
}