我建立一个QStringList中从一个文件:麻烦比较QTableWidgetItems到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);
}
}
这是编译,但在执行时发生段错误。表存在并且在此处完全填充。如果我明确地传递了目标字符串(行注释掉)它工作正常,但我需要检查它对StringList。
任何建议表示赞赏,一直让我疯狂!
您是否为每个项目调用了'QTableWidget :: setItem'? 'qDebug()<< ui-> tableWidget-> item(i,5)'输出了什么? – Amartel
是的,所有单元格都使用setItem设置。使用QTableWidgetItem创建的项目* abcItem = new QTableWidgetItem(QString :: fromStdString(abc.ToString())); .qDebug不工作,但QTextStream(标准输出)<< ui-> tableWidget-> item(i,5);给了我很多十六进制乱码。当我在消息弹出窗口中粘贴QString listitems = myStringList.join(“,”)时,文件内容可以正确显示。 – user3891489
在你写的'myStringList->'的最后一段代码中。这是一个复制粘贴错误,或者是'myStringList'指针?它有效吗? – Amartel