无法将QTableWidgetItems与QStringList项进行比较

时间:2015-06-22 12:28:57

标签: qt qtablewidget

我从文件构建一个QStringList:

QFile myTextFile("/home/user/Desktop/file.txt");
QStringList myStringList;
if (!myTextFile.open(QIODevice::ReadOnly))
    {
        QMessageBox::information(0, "Error opening file", myTextFile.errorString());
    }
else
    {  
        while(!myTextFile.atEnd())
        {
            myStringList.append(myTextFile.readLine());
        }
        myTextFile.close();
    }

...创建并填充了QTableWidget,然后我想在第5行中标记与myStringList中的某个项匹配的项:

int rows = ui->tableWidget->rowCount();
for(int i = 0; i < rows; ++i)
{
    QString str1 = ui->tableWidget->item(i, 5)->text();
    if (myStringList->contains(str1))
    //if(ui->tableWidget->item(i, 5)->text() == "targetstring")
    {
        ui->tableWidget->item(i, 5)->setBackgroundColor(Qt::blue);
    }
}

这会编译,但会在执行时出现段错误。表存在并且此时已完全填充。如果我显式传递targetstring(注释掉的行)它工作正常,但我需要检查StringList。

任何赞赏的建议,都让我疯了!

1 个答案:

答案 0 :(得分:0)

你说:

I then want to mark those items in row 5

但在代码中你设置为5列:

QString str1 = ui->tableWidget->item(i, 5 <- here)->text();
QTableWidgetItem *  item(int row, int column) const

我认为你只有一列,无论如何检查你的表的大小(输出表行和列计数并检查它,因为你的代码看起来真的不安全,即使是原型)。