Pregunta

Después de cargar un archivo en mi QtreeWidget, las filas están cada vez más altas que Bevor.

¿Cómo puedo evitar este comportamiento?

Aquí está mi aplicación:wrong row height

El Bottom QtreeWidget tiene la misma configuración que la anterior.

Aquí está la función de carga de un archivo 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);
    }
}

y aquí como ejemplo, una línea abreviada de mi archivo CSV:

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

Concateno todos los datos del tercer campo en el archivo CSV.

Quiero todos los datos en el mismo orden, así que tomo el GameId del distancEdable e inserto luego los datos del archivo CSV.

¡Gracias por adelantado!

Tobias

¿Fue útil?

Solución

¡Gracias a Johnathon y AJG85!

Un simple recortado () hizo el truco. No sé por qué no pensé en eso por mí mismo.

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top