2011-12-06 24 views
0

QTreeWidgetにファイルをロードした後、行はbevorよりも大きくなります。QTreeWidgetは自動的に行の高さを変更します

この現象を回避するにはどうすればよいですか? wrong row height

下QTreeWidgetは、上記1と同じ設定を持っています

は、ここに私のアプリケーションです。ここで

はcsvファイルの読み込み機能である:私の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); 
    } 
} 

、ここ1つのに短縮ライン:

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

私は上の3番目のフィールドからすべてのデータを連結csvファイルに保存します。

私はすべてのデータを同じ順序で入れたいので、distanceTableからGameIdを取得し、csvファイルからデータを挿入します。

ありがとうございます!

ジョナサンとAJG85にトビアス

+0

コードはここで役立ちます。スクリーンショットは、根本的な問題を示すものではありません。 – johnathon

+0

OK、挿入部分を追加しました。 "i"は "#"列の私のカウンターです。 csvFileはQVector です。 "j"はcsvファイルの行カウンタです。 –

+0

QT Designerを使ってGUIを作成しましたが、この情報が私を助けてくれたら助かります。 :-) –

答えて

0

ありがとう!

シンプルなトリム()がトリックを行いました。なぜ私は自分自身でそれについて考えなかったのか分かりません。

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); 
関連する問題