2015-06-22 33 views
0

我建立一个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。

任何建议表示赞赏,一直让我疯狂!

+0

您是否为每个项目调用了'QTableWidget :: setItem'? 'qDebug()<< ui-> tableWidget-> item(i,5)'输出了什么? – Amartel

+0

是的,所有单元格都使用setItem设置。使用QTableWidgetItem创建的项目* abcItem = new QTableWidgetItem(QString :: fromStdString(abc.ToString())); .qDebug不工作,但QTextStream(标准输出)<< ui-> tableWidget-> item(i,5);给了我很多十六进制乱码。当我在消息弹出窗口中粘贴QString listitems = myStringList.join(“,”)时,文件内容可以正确显示。 – user3891489

+0

在你写的'myStringList->'的最后一段代码中。这是一个复制粘贴错误,或者是'myStringList'指针?它有效吗? – Amartel

回答

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 

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

+0

对不起,我的意思是专栏!我绝对瞄准右栏。 – user3891489

+0

你能给我什么qDebug()输出“qDebug()<< ui-> tableWidget-> rowCount()<< ui-> tableWidget-> columnCount()”?和文件内容也许。 – UndeadDragon