Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

QT Работа с директориями, приложение зависает

15K
24 марта 2012 года
DragonHT
38 / / 02.08.2007
Доброе время суток.
Вообщем ситуация интересная, написал вот такой код:
Код:
#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;
}
Который рисует дерево с папками и файлами диска D:/
Всё офигенно, только дерево зараза рисуется как-то странно, оно и понятно по чему, я по завершении рекурсивного вызова функции DrawFS в цикле диспозицию каталога не восстанавливаю. пробовал добавить после DrawFS следующее:
 
Код:
Dir.cdUp();
но мне на это было объявлено "Фи!" и приложение не отрисовало окно при запуске.А в консоль выкинуло "Приложение завершено с кодом 62097...".
Просьба помочь с возвратом на уровень вверх и с отладкой рекурсии.
P.S. Я знаю что ресурсов моя реализуемая задача жрёт не мало.
15K
24 марта 2012 года
DragonHT
38 / / 02.08.2007
Есть ли смысл делать с помощью потоков?
15K
24 марта 2012 года
DragonHT
38 / / 02.08.2007
Попутно вопрос, как передать данные из базового потока в поток QThread?
316
24 марта 2012 года
Alm3n
889 / / 29.05.2009
Цитата: DragonHT
Попутно вопрос, как передать данные из базового потока в поток QThread?


Через ссылку в конструкторе потока.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог