C++ [Qt] QStringList-Daten in TreeWidget/-View anzeigen

~ba

Cadet 2nd Year
Registriert
Dez. 2010
Beiträge
24
Hallo,

ich habe folgendes Problem: Ich möchte mit einer Qt-GUI einige Dateien einlesen, und diese dann im Programm in einem QTreeWidget bzw. einer QTreeView anzeigen lassen. Jedoch liest QFileDialog::getOpenFileNames() die Dateien als QStringList ein, die ich zwar in einem QListWidget (bzw. QListView) anzeigen kann, mein QTreeWidget allerdings damit nichts anfangen kann.

Nun habe ich versucht, die QStringList mittels QTreeWidgetItem() in eine Liste mit dem Typ QTreeWidgetItem zu verwandeln und diese dann darstellen zu lassen, was aber auch nur mäßigen Erfolg gezeigt hat, weil jetzt jedes Element nicht in einer neuen Zeile, sondern in einer neuen Spalte angezeigt wird, das heißt, es gibt nur eine Zeile.

Wenn ich die QStringList hingegen nicht verändere, und mit einem QListWidget die Funktion QListWidget::addItem() verwende, funktioniert es so, wie ich es haben möchte.

Code:
void MainWindow::on_hinzufuegenButton_clicked()
{
    QStringList readFilesListe = QFileDialog::getOpenFileNames(
        this,
        "Dateien hinzufügen...",
        "/",
        ""
    );

    QTreeWidgetItem* readFiles = new QTreeWidgetItem(readFilesListe);

    ui->readFilesTreeWidget->addTopLevelItem(readFiles);
}

Wie bekomme ich es also hin, dass jedes Element der Liste der eingelesenen Dateien in einer neuen Zeile, quasi als eigenständiges Element, angezeigt wird? Ich vermute, dass ich hierzu die Methode void QTreeWidget::addTopLevelItems ( const QList<QTreeWidgetItem *> & items ) benutzen muss, allerdings verstehe ich den angegebenen Datentyp „QList<QTreeWidgetItem *>“ nicht.

In diesem Zusammenhang habe ich auch das Thema „Model/View programming“ gefunden, daher auch die gedoppelten Angaben im Titel und im ersten Absatz; hilft mir das weiter, oder sollte ich lieber die Finger davon lassen?

Vielen Dank im Voraus für erhellende Antworten.
 
Die QStringList ist ja nicht viel mehr als ein QList<QString>. Iterier also über alle QStrings in der QStringList und für jeden QString legst du ein Item an.

Wenn du einen Blick in der Referenz wirfst, siehst du auch, dass es bei dem was du bisher machst, ja das Ziel ist, mehrere Spalten zu befüllen.

~ba schrieb:
Ich vermute, dass ich hierzu die Methode void QTreeWidget::addTopLevelItems ( const QList<QTreeWidgetItem *> & items ) benutzen muss, allerdings verstehe ich den angegebenen Datentyp „QList<QTreeWidgetItem *>“ nicht.

Ne, damit kannst du nur mehrere Items auf einmal übergeben.
 
Vielen Dank, das hat mein Problem behoben. Ich verwende nun die folgende for-Schleife:
Code:
for(int i = 0; i < readFilesListe.size(); ++i){
        QTreeWidgetItem *readFile = new QTreeWidgetItem();
        readFile->setText(0,readFilesListe.at(i));
        ui->readFilesTreeWidget->addTopLevelItem(readFile);
    }
 
Zurück
Oben