Datei aus QTreeView heraus öffnen

Alles rund um die Programmierung mit Qt
Antworten
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Datei aus QTreeView heraus öffnen

Beitrag von Joont »

Hallo,

ich habe da mal wieder ein Problem bei dem ich selbst nicht auf die Lösung komme. Nun aber vorweg ein paar Infos. Ich habe ein DockWidget erstellt in dem ich mir meine Laufwerke anzeigen lasse. Jetzt möchte ich gerne, das wenn ich aus diesem DockWidget eine .txt datei auswähle, das der inhalt in einem extra Widget geöffnet wird und ich mir dann den Code aus der Datei herausholen kann. Wie kann ich das anstellen das ich aus dem QTreeView eine Datei öffnen kann. Hier mal der code, falls er benötigt wird.

Code: Alles auswählen

void MyEditor::snippet()
{
    QDockWidget *snippet = new QDockWidget(tr("Snippets"), this);
    snippet->setAllowedAreas(Qt::RightDockWidgetArea | Qt::LeftDockWidgetArea | Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);

    QFileSystemModel *model = new QFileSystemModel;
    model->setRootPath(QDir::currentPath());
    QTreeView *tree = new QTreeView();
    tree->setModel(model);
    snippet->setWidget(tree);
    addDockWidget(Qt::LeftDockWidgetArea, snippet);

}
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Über die Doku lässt sich sowas immer recht schnell selber rausfinden.
Anclicken == GUI -> SIGNAL im QTreeView suchen. Gibts keins. Basisklasse = QAbstractItemView -> Jippie: SIGNAL clicked (const QModelIndex&).
Also brauchen wir einen SLOT mit einem QModelIndex als Parameter - dort muss Code rein, der ausgeführt werden soll, wenn im TreeView was angeclickt wurde.
Nächster Schritt: QFileSystemModel nach "file" durchwurschteln -> Bamm!

Code: Alles auswählen

QIcon	fileIcon ( const QModelIndex & index ) const
QFileInfo	fileInfo ( const QModelIndex & index ) const
QString	fileName ( const QModelIndex & index ) const
QString	filePath ( const QModelIndex & index ) const
Jetzt brauchst du nur noch das File zu laden - das überlass ich dir, mit QFile &co in der Doku kommst du recht weit :)
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag von Joont »

Alles klar. Sobald ich heute Abend wieder Zeit habe werde ich mich erneut an die Arbeit machen. danke dir.
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag von Joont »

Hey,

ich habe letzte Nacht noch mal mein Buch durchstöbert und habe da etwas gefunden mit dem ich grade versuche mein Ziel zu erreichen. Ich bin soweit das ich den Datei namen in einem Tab öffnen kann. Jedoch komme ich aber nicht drauf was ich vergessen habe oder Falsch mache das der Text noch fehlt. Ich hoffe ihr könnt mir da noch mal weiterhelfen.

Code: Alles auswählen

void MyEditor::snippet()
{
    QDockWidget *snippet = new QDockWidget(tr("Snippets"), this);
    snippet->setAllowedAreas(Qt::RightDockWidgetArea | Qt::LeftDockWidgetArea | Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);

    model   =   new QDirModel;
    model->setReadOnly(true);
    model->setSorting(QDir::DirsFirst | QDir::Name);

    treeView    = new QTreeView;
    treeView->setModel(model);
    treeView->header()->setClickable(true);


    connect(treeView, SIGNAL( doubleClicked(const QModelIndex&) ),
            this, SLOT( getFile(const QModelIndex&) ) );


    snippet->setWidget(treeView);
    addDockWidget(Qt::LeftDockWidgetArea, snippet);
}








void MyEditor::getFile(const QModelIndex &index)
{

    if(index.isValid())

        if(model->fileInfo(index).isFile())
        {

            QTextEdit* textEdit = new QTextEdit;
            QString fileName =  model->fileName(index);
            
            if (!fileName.isEmpty()) {
            QFile file(fileName);

            if (file.open(QFile::ReadOnly | QFile::Text))
            textEdit->insertPlainText(file.readAll());
            tab->addTab(textEdit, fileName);
            tab->setCurrentWidget(textEdit);



        }
      }
}
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag von Joont »

Hey,

also ich habe es grade eben gelöst. Ich habe meinen Fehler gefunen und behoben. So wie das Script jetzt ist funktioniert es. Hier noch mal für Nachfolger:

Code: Alles auswählen

void MyEditor::snippet()
{
    QDockWidget *snippet = new QDockWidget(tr("Snippets"), this);
    snippet->setAllowedAreas(Qt::RightDockWidgetArea | Qt::LeftDockWidgetArea | Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);

    model   =   new QDirModel;
    model->setReadOnly(true);
    model->setSorting(QDir::DirsFirst | QDir::Name);

    treeView    = new QTreeView;
    treeView->setModel(model);
    treeView->header()->setClickable(true);


    connect(treeView, SIGNAL( doubleClicked(const QModelIndex&) ),
            this, SLOT( getFile(const QModelIndex&) ) );


    snippet->setWidget(treeView);
    addDockWidget(Qt::LeftDockWidgetArea, snippet);
    statusBar()->showMessage( tr("Verzeichnisse wurden geladen"), 5000 );
}


void MyEditor::getFile(const QModelIndex &index)
{

    if(index.isValid())
    {
        //Verzeichnisse
    }
        if(model->fileInfo(index).isFile())
        {

            QTextEdit* textEdit = new QTextEdit;
            QString fileName =  model->filePath(index);

            if (!fileName.isEmpty()) {
            QFile file(fileName);
            if (file.open(QFile::ReadOnly | QFile::Text))
            {
            textEdit->insertPlainText(file.readAll());
            tab->addTab(textEdit, fileName);
            tab->setCurrentWidget(textEdit);
            highlighter = new Highlighter(textEdit->document());
            statusBar()->showMessage( tr("Datei erfolgreich geöffnet"), 5000 );
          }
        }
      }
}
Antworten