Search code examples
c++qtqtreeviewdirectory-listing

Browsing Directory Using ui and QTreeWidget with qt


I have created a ui with QT designer.

In that ui i use one pushbutton for browse directories,and one lineedit for select dir path text to show, and another pushbuton for ok, these 3 widgets and one treewidget are placed on a groupbox horizontally.

What I would want to know is if i browse and click ok button then i want to display the treeview to that path on the ui

my test1.h file contains

#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

my test1.cpp file contains

#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 contains

#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

am not getting output, while am checking on the debug points each and every thing fine but not getting the output on the ui treewidget

Is this possible, please help me where can i modify my code.

Thanks all.


Solution

  • 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 file:

    #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 file:

    #include "test1.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {   
        QApplication a(argc, argv);
        line w;
        w.show();
    
    
        return a.exec();
    }