2011-12-06 22 views
0

,這些行的增長量高於bevor。QTreeWidget在將文件加載到我的QTreeWidget中後自動更改行高

我該如何避免這種行爲?

這裏是我的應用程序: wrong row height

底部QTreeWidget具有相同的設置,如上圖所示。

下面是一個CSV文件的加載功能:

void MainWindow::openCSV() 
{ 
    if(!arffRead) 
    { 
     QMessageBox msgBox; 
     msgBox.setIcon(QMessageBox::Warning); 
     msgBox.setText("You have to open the .arff file at first."); 
     msgBox.exec();   
     return; 
    } 
    QFileDialog dialog(this); 
    dialog.setFileMode(QFileDialog::ExistingFile); 
    dialog.setNameFilter(tr("CSV (*.csv)")); 
    dialog.setViewMode(QFileDialog::Detail); 
    QString fileName; 
    QString buffer; 
    if (dialog.exec() == QFileDialog::Accepted) 
    { 
     fileName = dialog.selectedFiles()[0]; 

     QFile file(fileName); 
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
     { 
      cout << "Error opening " + fileName.toStdString() + "." << endl; 
     } 

     gameTable->clear(); 

     QVector<QStringList> csvFile; 

     while (!file.atEnd()) 
     { 
      QString line(file.readLine()); 
      QStringList tokens = line.split(","); 
      csvFile.push_back(tokens); 
     } 

     if(distanceTable->topLevelItemCount() != csvFile.size()) 
     { 
      QMessageBox msgBox; 
      msgBox.setIcon(QMessageBox::Warning); 
      msgBox.setText("Your files have different numbers of lines."); 
      msgBox.exec();   
      return; 
     } 

     for(int i=0; i<distanceTable->topLevelItemCount();i++) 
     { 
      for(int j=0; j<csvFile.size(); j++) 
      { 
       if(distanceTable->topLevelItem(i)->text(1) == csvFile.at(j).at(0)) 
       { 
        QTreeWidgetItem* item = new QTreeWidgetItem; 
        item->setText(0, QString::number(i+1)); 
        item->setText(1, csvFile.at(j).at(0)); 
        item->setText(2, csvFile.at(j).at(2)); 

        QString strategy = csvFile.at(j).at(3); 
        for(int k=4;k<csvFile.at(j).size();k++) 
        { 
         strategy += " " % csvFile.at(j).at(k); 
        } 
        item->setText(3, strategy); 

        gameTable->insertTopLevelItem(i,item); 
        break; 
       } 
      } 
     } 
     gameTable->resizeColumnToContents(3); 
    } 
} 

,並在這裏從我的csv文件一例中的一短行:

1,Zerg,lose,Train Drone,3,Train Overlord,37,Train Drone,44,Build Spawning,80, (...) 

我串聯所有數據從第三場的在csv文件中。

我希望所有數據的順序相同,所以我從distanceTable中獲取GameId,然後插入csv文件中的數據。

在此先感謝!

Tobias

+0

代碼將在這裏有所幫助。屏幕截圖不會顯示潛在問題。 – johnathon

+0

好的,我添加了插入部分。 「我」是我的「#」列的計數器。 csvFile是一個QVector 。 「j」是csv文件的行計數器。 –

+0

我使用QT Designer來創建GUI ...如果這些信息有助於幫助我。 :-) –

回答

0

感謝johnathon和AJG85!

一個簡單的修剪()做了伎倆。我不知道爲什麼我沒有想到我自己。

QString strategy = csvFile.at(j).at(3); 
for(int k=4;k<csvFile.at(j).size();k++) 
{ 
    strategy += " " % csvFile.at(j).at(k); 
} 
strategy = strategy.trimmed(); 
item->setText(3, strategy);