2016-06-22 62 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(); 
}