QT Работа с директориями, приложение зависает
Вообщем ситуация интересная, написал вот такой код:
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore/QCoreApplication>
#include <QDir>
#include <QAxObject>
#include <iostream>
#include <QtGui/QApplication>
#include <QtTest/QTest>
int recurCnt = 5;
int DrawFS (QDir Dir, QTreeWidgetItem* parent);
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QList<QTreeWidgetItem> dirTree;
QDir dir;
dir.setPath("D:/");
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0,dir.absolutePath());
ui->treeWidget->insertTopLevelItem(0,item);
DrawFS(dir, item);
}
int DrawFS (QDir Dir, QTreeWidgetItem* parent){
recurCnt--;
QList<QTreeWidgetItem*> Tree;
QString Path;
Path=Dir.path();
Dir.setFilter(QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot );
Dir.setSorting(QDir::Size | QDir::Reversed);
QFileInfoList list = Dir.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
Tree.append(new QTreeWidgetItem());
Tree.last()->setText(0,fileInfo.fileName());
parent->addChild(Tree.last());
if (fileInfo.isDir()){
while(true){
if (recurCnt<1)
QTest::qSleep(100);
else{
Dir.cd(fileInfo.baseName());
DrawFS(Dir, Tree.last());
break;
}
}
}
}
recurCnt++;
return 0;
}
MainWindow::~MainWindow()
{
delete ui;
}
#include "ui_mainwindow.h"
#include <QtCore/QCoreApplication>
#include <QDir>
#include <QAxObject>
#include <iostream>
#include <QtGui/QApplication>
#include <QtTest/QTest>
int recurCnt = 5;
int DrawFS (QDir Dir, QTreeWidgetItem* parent);
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QList<QTreeWidgetItem> dirTree;
QDir dir;
dir.setPath("D:/");
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0,dir.absolutePath());
ui->treeWidget->insertTopLevelItem(0,item);
DrawFS(dir, item);
}
int DrawFS (QDir Dir, QTreeWidgetItem* parent){
recurCnt--;
QList<QTreeWidgetItem*> Tree;
QString Path;
Path=Dir.path();
Dir.setFilter(QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot );
Dir.setSorting(QDir::Size | QDir::Reversed);
QFileInfoList list = Dir.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
Tree.append(new QTreeWidgetItem());
Tree.last()->setText(0,fileInfo.fileName());
parent->addChild(Tree.last());
if (fileInfo.isDir()){
while(true){
if (recurCnt<1)
QTest::qSleep(100);
else{
Dir.cd(fileInfo.baseName());
DrawFS(Dir, Tree.last());
break;
}
}
}
}
recurCnt++;
return 0;
}
MainWindow::~MainWindow()
{
delete ui;
}
Всё офигенно, только дерево зараза рисуется как-то странно, оно и понятно по чему, я по завершении рекурсивного вызова функции DrawFS в цикле диспозицию каталога не восстанавливаю. пробовал добавить после DrawFS следующее:
Код:
Dir.cdUp();
Просьба помочь с возвратом на уровень вверх и с отладкой рекурсии.
P.S. Я знаю что ресурсов моя реализуемая задача жрёт не мало.
Есть ли смысл делать с помощью потоков?
Попутно вопрос, как передать данные из базового потока в поток QThread?
Цитата: DragonHT
Попутно вопрос, как передать данные из базового потока в поток QThread?
Через ссылку в конструкторе потока.