我从文件构建一个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。
任何赞赏的建议,都让我疯了!
答案 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
我认为你只有一列,无论如何检查你的表的大小(输出表行和列计数并检查它,因为你的代码看起来真的不安全,即使是原型)。