2016-06-22 60 views
0

我用QT設計器創建了一個用戶界面。瀏覽目錄使用用戶界面和QTreeWidget與qt

在那個UI中,我使用一個按鈕作爲瀏覽目錄,一個lineedit用於選擇目錄路徑文本以顯示,另一個用於確定的按鈕,這三個小部件和一個treewidget水平放置在groupbox上。

我想知道的是,如果我瀏覽,然後點擊確定按鈕,然後我要顯示在UI樹視圖到該路徑

我test1.h文件包含

#ifndef LINEEDIT_H 
#define LINEEDIT_H 

#include <QtGui> 
#include "ui_line1.h" 
#include <stdlib.h> 
#include <iostream> 
using namespace Ui; 

class line : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    line(QWidget *parent = 0); 

    QTreeWidget(parent); 

    void viewer(QTreeWidgetItem* item,QString filePath); 

private: 
    Ui::lineedit ui; 
    QDirModel *model; 
    public slots: 
     void browse(); 
     void treeview(); 
    void showDirectory(QTreeWidgetItem* item, int /*column*/); 

}; 
#endif // LINEEDIT_H 

我TEST1 .cpp文件包含

#include "test1.h" 
#include <QTreeWidget> 
#include <QtGui> 
#include <stdlib.h> 
#include <iostream> 
#include<QWidget> 
#include<QTreeWidgetItem> 
line::line(QWidget* parent) 
{ 
    ui.setupUi(this); 
    connect(ui.browse, SIGNAL(clicked()), this,SLOT(browse())); 
    connect(ui.ok, SIGNAL(clicked()), this,SLOT(treeview())); 
    connect(this , SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(showDirectory(QTreeWidgetItem*,int))); 
} 
void line::browse() 
{ 
    QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), 
     "/home",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); 
    ui.lineEdit->setText(dir); 
} 
void line::treeview() 
{ 


    QWidget *centralWidget = new QWidget(); 
    line *tree = new line (centralWidget); 
    tree->setFixedSize(395,395); 
    QTreeWidgetItem* headerItem = new QTreeWidgetItem(); 
    headerItem->setText(0,QString("File Name")); 
    headerItem->setText(1,QString("Size (Bytes)")); 
    headerItem->setText(2,QString("Path")); 
    ui.treeWidget->setHeaderItem(headerItem); 
    ui.treeWidget->setColumnCount(2); 
    //ui.treeView-> 
    //setHeaderItem(headerItem); 
    QString strdir=ui.lineEdit->text(); 
    QDir* rootDir = new QDir(strdir); 
    QFileInfoList filesList = rootDir->entryInfoList(); 
    foreach(QFileInfo fileInfo, filesList) 
    { 
     QTreeWidgetItem* item = new QTreeWidgetItem(); 
     item->setText(0,fileInfo.fileName()); 
     if(fileInfo.isFile()) 
     { 
      item->setText(1,QString::number(fileInfo.size())); 
      item->setIcon(0,*(new QIcon("file.jpg"))); 
     } 
     if(fileInfo.isDir()) 
     { 
      item->setIcon(0,*(new QIcon("folder.jpg"))); 
      viewer(item,fileInfo.filePath()); 
     } 
     item->setText(2,fileInfo.filePath()); 
     ui.treeWidget->addTopLevelItem(item);  
    } 
    QPalette* palette = new QPalette(); 
    palette->setColor(QPalette::Base,Qt::red); 
    ui.treeWidget->setPalette(*(palette)); 
    /*window->setCentralWidget(centralWidget);*/ 
    /*ui.treeWidget->addTopLevelItem(centralWidget);*/ 
    /*window->show();*/ 
    return treeview(); 
} 
void line::viewer(QTreeWidgetItem* item,QString filePath) 
{ 
    QDir* rootDir = new QDir(filePath); 
    QFileInfoList filesList = rootDir->entryInfoList(); 
    foreach(QFileInfo fileInfo, filesList) 
    { 
     QTreeWidgetItem* child = new QTreeWidgetItem(); 
     child->setText(0,fileInfo.fileName()); 
     if(fileInfo.isFile()) 
     { 
      child->setText(1,QString::number(fileInfo.size())); 
     } 
     if(fileInfo.isDir()) 
     { 
      child->setIcon(0,*(new QIcon("folder.jpg"))); 
      child->setText(2,fileInfo.filePath()); 
     } 
     item->addChild(child); 
    } 
} 
void line::showDirectory(QTreeWidgetItem* item, int) 
{ 
    QDir* rootDir = new QDir(item->text(2)); 
    QFileInfoList filesList = rootDir->entryInfoList(); 
    foreach(QFileInfo fileInfo, filesList) 
    { 
     QTreeWidgetItem* child = new QTreeWidgetItem(); 
     child->setText(0,fileInfo.fileName());  
     if(fileInfo.isFile()) 
     { 
      child->setText(1,QString::number(fileInfo.size())); 
      child->setIcon(0,*(new QIcon("file.jpg"))); 
     } 
     if(fileInfo.isDir()) 
     { 
      child->setIcon(0,*(new QIcon("folder.jpg"))); 
      child->setText(2,fileInfo.filePath()); 
     } 
     item->addChild(child); 
     /*resizeColumnToContents(0);*/ 
    } 
} 

main.cpp中包含

#include "test1.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    line w; 
    w.show(); 


    return a.exec(); 
} 

enter image description here

我沒有得到輸出,而我對每一個東西很好,但沒有得到關於treewidget

這是可能的UI輸出,請幫助我,我在哪裏可以修改調試點檢查我碼。

謝謝大家。

+3

這可能幫助:HTTP://doc.qt。 io/qt-4.8/qt-itemviews-dirview-example.html –

+0

但是我想幹涉ui瀏覽路徑,從那個路徑我想顯示一個treeview,請給我一個簡單的例如,我如何得到這個。 –

回答

0

test1.cppfile:

#include "test1.h" 
#include <QTreeWidget> 
#include <QtGui> 
#include <stdlib.h> 
#include <iostream> 
#include<QWidget> 
#include<QTreeWidgetItem> 
line::line(QWidget* parent) 
{ 
    ui.setupUi(this); 
    connect(ui.browse, SIGNAL(clicked()), this,SLOT(browse())); 
    connect(ui.ok, SIGNAL(clicked()), this,SLOT(treeview())); 
    connect(this , SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(showDirectory(QTreeWidgetItem*,int))); 
} 
void line::browse() 
{ 
    QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), 
     "/home",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); 
    ui.lineEdit->setText(dir); 
} 
void line::treeview() 
{ 
    QString strdir=ui.lineEdit->text(); 
    QDir* rootDir = new QDir(strdir); 
    QFileInfoList filesList = rootDir->entryInfoList(); 
    /*QTreeWidgetItem* item = new QTreeWidgetItem();*/ 
ui.treeWidget->setColumnCount(1); 
QList<QTreeWidgetItem *> items; 
foreach(QFileInfo fileInfo, filesList) 
    { 
     QTreeWidgetItem* item = new QTreeWidgetItem(); 
     item->setText(0,fileInfo.fileName()); 
     if(fileInfo.isFile()) 
     { 
      item->setText(1,QString::number(fileInfo.size())); 
      item->setIcon(0,*(new QIcon("file.jpg"))); 
      /*treeItem->setCurrentItem(item);*/ 
     } 
     if(fileInfo.isDir()) 
     { 
      item->setIcon(0,*(new QIcon("folder.jpg"))); 
      viewer(item,fileInfo.filePath()); 
     } 
     item->setText(2,fileInfo.filePath()); 
     ui.treeWidget->addTopLevelItem(item); 
     /* ui.treeWidget->insertTopLevelItems(0, item);*/ 
    items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1")))); 
ui.treeWidget->insertTopLevelItems(0, items); 
} 
} 
void line::viewer(QTreeWidgetItem* item,QString filePath) 
{ 
    QDir* rootDir = new QDir(filePath); 
    QFileInfoList filesList = rootDir->entryInfoList(); 
    foreach(QFileInfo fileInfo, filesList) 
    { 
     QTreeWidgetItem* child = new QTreeWidgetItem(); 
     child->setText(0,fileInfo.fileName()); 
     if(fileInfo.isFile()) 
     { 
      child->setText(1,QString::number(fileInfo.size())); 
     } 
     if(fileInfo.isDir()) 
     { 
      child->setIcon(0,*(new QIcon("folder.jpg"))); 
      child->setText(2,fileInfo.filePath()); 
     } 
     item->addChild(child); 
     ui.treeWidget->addTopLevelItem(item); 
    } 
} 
void line::showDirectory(QTreeWidgetItem* item, int) 
{ 
    QDir* rootDir = new QDir(item->text(2)); 
    QFileInfoList filesList = rootDir->entryInfoList(); 
    foreach(QFileInfo fileInfo, filesList) 
    { 
     QTreeWidgetItem* child = new QTreeWidgetItem(); 
     child->setText(0,fileInfo.fileName());  
     if(fileInfo.isFile()) 
     { 
      child->setText(1,QString::number(fileInfo.size())); 
      child->setIcon(0,*(new QIcon("file.jpg"))); 
     } 
     if(fileInfo.isDir()) 
     { 
      child->setIcon(0,*(new QIcon("folder.jpg"))); 
      child->setText(2,fileInfo.filePath()); 
     } 
     item->addChild(child); 
     ui.treeWidget->addTopLevelItem(item); 
     /*resizeColumnToContents(0);*/ 
    } 


} 

test1.h文件:

#ifndef LINEEDIT_H 
#define LINEEDIT_H 

#include <QtGui> 
#include "ui_line1.h" 
#include <stdlib.h> 
#include <iostream> 
using namespace Ui; 

class line : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    line(QWidget *parent = 0); 

    QTreeWidget(parent); 

    void viewer(QTreeWidgetItem* item,QString filePath); 

private: 
    Ui::lineedit ui; 
    QDirModel *model; 
    public slots: 
     void browse(); 
     void treeview(); 
    void showDirectory(QTreeWidgetItem* item, int /*column*/); 

}; 
#endif // LINEEDIT_H 

的main.cpp文件:

#include "test1.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    line w; 
    w.show(); 


    return a.exec(); 
}