2013-11-25 24 views
1

問題是我最近纔開始編寫C++程序。我的問題如下:Qt 5從treeView和QFileSystemModel運行文件

如何使在mainwindow/treeview中查看文件運行?

要查看的文檔是帶有靜態路徑的純文本文檔。 sPath是文件所在目錄的路徑。

下面是我的「mainwindow.cpp」文件。

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include "QDirModel" 
#include "QTreeView" 
#include "QFileSystemModel" 
#include "QtGui" 
#include "QtCore" 
#include "QDir" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QString sPath ="/home/simon/QT Projects/Bra_Programmering/utlatanden/"; 

    filemodel = new QFileSystemModel(this); 
    filemodel->setFilter(QDir::Files | QDir::NoDotAndDotDot); 
    filemodel->setNameFilterDisables(false); 
    filemodel->setRootPath(sPath); 
    ui->treeView->setModel(filemodel); 
    ui->treeView->setRootIndex(filemodel->setRootPath(sPath)); 
} 

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

void MainWindow::on_treeView_doubleClicked(const QModelIndex &index) 
{ 

}; 

接下來是我的「mainwindow.h」文件。

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <mainwindow.h> 
#include <QtCore> 
#include <QtGui> 
#include <QDirModel> 
#include <QFileSystemModel> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

private slots: 

    void on_treeView_doubleClicked(const QModelIndex &index); 

private: 
    Ui::MainWindow *ui; 
    QFileSystemModel *filemodel; 
}; 

#endif // MAINWINDOW_H 

回答

2

如果你想打開與默認文本查看器文件:

void MainWindow::on_treeView_doubleClicked(const QModelIndex &index) 
{ 
    QDesktopServices::openUrl(QUrl::fromLocalFile(filemodel->filePath(index))); 
} 

或者,如果你想你的Qt應用程序來打開文本文件應該是:

void MainWindow::on_treeView_doubleClicked(const QModelIndex &index) 
{ 
    QFile file(filemodel->filePath(index)); 

    if(file.open(QFile::ReadOnly | QFile::Text)) 
    { 
     QTextStream in(&file); 
     QString text = in.readAll(); 
     // Do something with the text 
     file.close(); 
    } 
}