Russian Qt Forum
Ноябрь 25, 2024, 12:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: QTreeWidget  (Прочитано 15129 раз)
kadr
Гость
« Ответ #30 : Август 24, 2010, 15:46 »

ну а вообще если хотите посмотреть на эффект... попробуйте ui->left_pole->currentIndex() или ui->left_pole->currentIndex()->parent() к примеру... желательно их конечно же на валидность проверить...
ui->left_pole->currentIndex()  - это не работает.
ui->left_pole->currentIndex()->parent() - а это работает!
Записан
kadr
Гость
« Ответ #31 : Август 25, 2010, 12:23 »

Помогите, мне нужно рекурсивно считывать содержимое папок, для дальнейшего копирования этого содержимого. Я накатал кое какой алгоритм, но он не правильно отрабатывает.
Код:
QStringList Linux_Comander::scanfolder(QString path)
{
    dir_f.cd(path);
    dir_f.setSorting(QDir::DirsFirst);
    while(i_f != dir_f.count())
    {
        if ((dir_f.entryInfoList().value(i_f).isDir()) && (dir_f.entryList().value(i_f) != ".") && (dir_f.entryList().value(i_f) != ".."))
        {
           map_fs.append(dir_f.entryList());
           i_f++;
           scanfolder(dir_f.entryList().value(i_f));
        }
       
    }
            return map_fs;
  }
Мне надо куда то воткнуть dir_f.cdUp(), я не знаю куда! Подскажите как правильно это сделать, или может быть есть способ попроще, мне нужно, что бы при нажатии кнопки копировать, все содержимое папки, включая и вложеные папки с их содержимым, скопировалось в указанное место!
« Последнее редактирование: Август 25, 2010, 12:25 от kadr » Записан
Kolobok
Гость
« Ответ #32 : Август 25, 2010, 13:52 »

QDirIterator?
Записан
kadr
Гость
« Ответ #33 : Август 25, 2010, 15:47 »

А есть в Qt какая нибудь функция, которая может скопировать всю папку с вложенными папками и файлами, челиком?  Непонимающий
Записан
crossly
Гость
« Ответ #34 : Август 25, 2010, 15:55 »

а может меда на блюдечки... ??Улыбающийся
Записан
kadr
Гость
« Ответ #35 : Август 26, 2010, 07:01 »

а может меда на блюдечки... ??Улыбающийся
Значит нет!
Записан
kadr
Гость
« Ответ #36 : Август 26, 2010, 15:58 »

Вот код для рекурсивного копирования файлов и подкаталогов!
Код:
void Linux_Comander::CopyFolder(QString strFrom, QString strTo)
{

  QDir dir;

  QFile file;
  //strFrom - имя папки, откуда  копировать
  //strTo - имя папки, куда  копировать

  //убедимся, что имена заканчиваются слэшем, если нет - добавим
  if (strTo.right(1) != "")
     strTo += '/';
  if (strFrom.right(1) != "")
     strFrom += '/';

  //создаем ("копируем") текущую папку

  dir.mkdir(strTo);
    qDebug() << strTo;
  //будем перебирать все файлы и папки в текущей


  QDirIterator itr(strFrom,QDirIterator::Subdirectories);
  while(itr.hasNext())
  {

     QString strFilePath = itr.filePath();
     QString strFileTitle = itr.fileName();


     //отсекаем "." и ".."
     if (itr.fileName() != "." && itr.fileName() != "..")
     {
        if (itr.fileInfo().isDir())
           //рекурсивное погружение в найденную папку (strTo + strFileTitle)
           CopyFolder(strFilePath, strTo + strFileTitle);
        else
           //просто копируем файл
           file.copy(strFilePath, strTo + strFileTitle);
     }
     itr.next();
  }



}
Записан
kadr
Гость
« Ответ #37 : Август 27, 2010, 07:24 »

Народ помогите разобраться, у меня есть алгоритм рекурсивного удаления папок вместе с их содержимым, работает впринципе нормально, но вот проблема, если перед удалением зайти в удаляемый каталог, то при удалении он пишет:
Код:
QFileSystemWatcher: FindNextChangeNotification failed!! (???????? ? ???????.)
А после перезагрузки приложения папки уже нет.
Код:
bool Linux_Comander::clearAndRemoveDirectory(QString  dir)
    {
            QDir dirObj(dir);
            foreach (QString fileName, dirObj.entryList())
            {
                    if (fileName == "." || fileName == "..") continue;
                    if (QFileInfo(dirObj.filePath(fileName)).isDir())
                    {
                            clearAndRemoveDirectory(dirObj.filePath(fileName));
                    }
                    else
                    {
                            dirObj.remove(fileName);
                    }
            }

            if (!dirObj.rmdir(dir))
            {
                QMessageBox::information(this,"Ошибка удаления","Не удалось удалить временную директорию "+dir);
                return false;
            }
            left_pole_update(model_l->index(ui->adress_line_left->text().trimmed()));
            right_pole_update(model_r->index(ui->adress_line_right->text().trimmed()));
            return true;
    }
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 21.