Просмотр каталога с использованием пользовательского интерфейса и QTreeWidget с qt

Я создал пользовательский интерфейс с дизайнером QT.

В этом пользовательском интерфейсе я использую одну кнопку для просмотра каталогов и одну строку редактирования для выбора текста пути к каталогу для отображения и еще одну кнопку для ОК, эти 3 виджета и один древовидный виджет размещаются в групповом поле по горизонтали.

Что я хотел бы знать, так это то, что если я просматриваю и нажимаю кнопку «ОК», я хочу отобразить древовидное представление этого пути в пользовательском интерфейсе.

мой файл 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();
}

введите здесь описание изображения

я не получаю вывод, пока проверяю точки отладки, все в порядке, но не получаю вывод в виджете дерева пользовательского интерфейса

Возможно ли это, пожалуйста, помогите мне, где я могу изменить свой код.

Спасибо всем.


person Srikanth Togara    schedule 22.06.2016    source источник
comment
Это может помочь: doc.qt.io/qt-4.8/ qt-itemviews-dirview-example.html   -  person JefGli    schedule 22.06.2016
comment
Но я хочу помешать пользовательскому интерфейсу просматривать путь, с этого пути я хочу показать древовидное представление, пожалуйста, дайте мне простой пример, как я могу это получить.   -  person Srikanth Togara    schedule 23.06.2016


Ответы (1)


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()
{   
    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();
}
person Srikanth Togara    schedule 12.07.2016