Seite 1 von 1

Probleme mit QDir /Qfiledialog in Verbindung m. QTreewidget

Verfasst: 26. Mai 2010 19:23
von timo_81
Hallo werte Qt-Gemeinde!

Ich habe mich einer längeren programmierfreien Zeit, an ein QT-Projekt rangewagt. Es soll ein Tool werden mit dem man Quellcode Dateien von
unnützen #include Direktiven säubern kann.

Da aller Anfang schwer ist, gibt es schon mit der Pröäsentation der Daten ein Problem:

Nach Betätigen eines Knopfes, soll ein QFileDialog erscheinen, mit dem man
ein Projektverzeichnis auswählt. Danach soll das Verzeichnis und die Daten in eine Baumansicht geladen werden, wobei es ungefähr die Struktur des
QtCreators nachahmen soll.

Die Gui wurde im Designer erstellt, die ui Datei ist auch als .h vorhanden.
Möchte ich nun einen simplen Text in die Baumansicht einfügen, geht dies ohne Probleme.
Nur das gewählte Verzeichnis und die SourceDateien werfen einen Compilerfehler aus der wie folge lautet:

error: no matching function for call to 'QTreeWidgetItem::setText(int, QStringList)'


Anbei die Code Dateien:

mainwindow.h

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDir>



namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void changeEvent(QEvent *e);




private:
    Ui::MainWindow *ui;
    QDir directory;

private slots:
    void changeDirectory();
    void fillDirTree();

};

#endif // MAINWINDOW_H
main.cpp

Code: Alles auswählen

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
#if defined(Q_WS_S60)
    w.showMaximized();
#else
    w.show();
#endif
    return a.exec();
}

und nun die Datei die den Fehler auswirft:

mainwindow.cpp

Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QTreeWidgetItem>
#include <QFileSystemModel>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->qButtonLoad,SIGNAL(clicked()), this, SLOT(changeDirectory()));
    fillDirTree();

}


MainWindow::~MainWindow()
{
    delete ui;
}




void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }

}



void MainWindow::changeDirectory()
{
/* select a directory using file dialog */
    QString path = QFileDialog::getExistingDirectory (this, tr("Projektordner"), directory.path());


    if ( path.isNull() == false )
    {
        directory.setPath(path);
        fillDirTree();
    }

}

void MainWindow::fillDirTree()
{



    QTreeWidgetItem *qtFileDir = new QTreeWidgetItem(ui->qTreeDir);
    qtFileDir->setText( 0, directory.currentPath());
    QTreeWidgetItem *qtFiles= new QTreeWidgetItem(qtFileDir);
    
    // directory.entryList() ergibt den Fehler!
    qtFiles->setText( 0,directory.entryList());



}
die vom Designer generierten Dateien kann ich noch nachliefern, falls Bedarf besteht.
Mit einem Listwidget geht es auch. Nur das Treewidget stellt sich wuer.

Das Treewidget aus dem Designer hat den Name qTreeDir


Vielen Dank für mögliche Hilfestellungen
Schön mal wieder hier zu sein ;)
Schönen Tag
Timo

Verfasst: 26. Mai 2010 19:30
von upsala
entryList gibt eine Liste zurück und setText erwartet nur einen QString. Steht auch schon in der Fehlermeldung.

Verfasst: 26. Mai 2010 20:02
von timo_81
Hallo,
vielen Dank für die schnelle Antwort.
Wie gehe ich nun am Besten vor?
Kann man da eine Umwandlung machen?

Geht das mit QDir überhaupt nicht?

Verfasst: 26. Mai 2010 20:38
von upsala
Der Unterschied zwischen einer String-Liste und einem String sollte dir eigentlich schon bekannt sein.