2015-06-22 64 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