crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> ListView & QDirModel, Удаление директории или файла
enslaver
  опции профиля:
сообщение 30.3.2010, 20:32
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 25.3.2010
Пользователь №: 1565

Спасибо сказали: 0 раз(а)




Репутация:   0  


Имеем код
void MainWindow::deletAct(){ //Удаление выбранного файла или директории
     QMessageBox msgBox;
     msgBox.setWindowTitle(tr("Delete"));
     msgBox.setText(tr("Do you want to Delete %1?").arg(DirModel->fileName(ListView->currentIndex())));
     msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
     int ret = msgBox.exec();
     switch(ret){
         case QMessageBox::Ok:
         if (!DirModel->isDir(ListView->currentIndex()) | DirModel->remove(ListView->currentIndex()))
             QMessageBox::information(this,tr("Message"),tr("File %1 Deleted").arg(DirModel->fileName(ListView->currentIndex())));
         else if (DirModel->isDir(ListView->currentIndex()) | DirModel->rmdir(ListView->currentIndex()))
             QMessageBox::information(this,tr("Message"),tr("Dir %1 Deleted").arg(DirModel->fileName(ListView->currentIndex())));
         break;
         case QMessageBox::Cancel:
         break;
     }
     DirModel->refresh(ListView->rootIndex());
}

Должен удалять файл или директорию, но он сообщение выводит а сами объекты не удаляет.

В чем моя ошибка, какие будут предложения...?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.3.2010, 20:40
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Почему у тебя операция ИЛИ используется?
ЕСЛИ НЕ DirModel->isDir(ListView->currentIndex()) ИЛИ DirModel->remove(ListView->currentIndex()) ТО
...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
enslaver
  опции профиля:
сообщение 30.3.2010, 21:32
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 25.3.2010
Пользователь №: 1565

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 30.3.2010, 20:40) *
Почему у тебя операция ИЛИ используется?
ЕСЛИ НЕ DirModel->isDir(ListView->currentIndex()) ИЛИ DirModel->remove(ListView->currentIndex()) ТО
...


Сори не обратил внимание когда вставлял, просто менял там много....
а так оно даже при оставлении одного
DirModel->remove(ListView->currentIndex()


почему то QDirModel не хочет удалять, пришлось использовать QDir
if (!DirModel->isDir(ListView->currentIndex()) && Dir->remove(ModelIndexToString(ListView->currentIndex())))


но директорию все равно не удаляет... даже не знаю куда копать. сейчас код такой.
if (!DirModel->isDir(ListView->currentIndex()) && Dir->remove(ModelIndexToString(ListView->currentIndex())))
             QMessageBox::information(this,tr("Message"),tr("File %1 Deleted").arg(DirModel->fileName(ListView->currentIndex())));
         else if (Dir->rmpath(ModelIndexToString(ListView->currentIndex())))
             QMessageBox::information(this,tr("Message"),tr("Dir %1 Deleted").arg(DirModel->fileName(ListView->currentIndex())));

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.3.2010, 21:52
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(enslaver @ 31.3.2010, 1:32) *
DirModel->remove(ListView->currentIndex())
что возвращает эта функция?

П.С, если мне не изменяет память, то QFileSystemModel рекомендован на замену QDirModel
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
enslaver
  опции профиля:
сообщение 31.3.2010, 0:37
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 25.3.2010
Пользователь №: 1565

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
П.С, если мне не изменяет память, то QFileSystemModel рекомендован на замену QDirModel

что то заменил им, и вообще ничего показывать не стало
а
DirModel->remove(ListView->currentIndex()

false и не выполняется (но с QDir все работает)
а вот директорию вообще не удаляет ни одной из команд
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.3.2010, 2:19
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(enslaver @ 31.3.2010, 4:37) *
а вот директорию вообще не удаляет ни одной из команд
удаляются только пустые каталоги. Смотри наше ЧаВо: Как удалить каталог и вложенные в него каталоги и файлы?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
enslaver
  опции профиля:
сообщение 31.3.2010, 17:39
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 25.3.2010
Пользователь №: 1565

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 31.3.2010, 2:19) *
Цитата(enslaver @ 31.3.2010, 4:37) *
а вот директорию вообще не удаляет ни одной из команд
удаляются только пустые каталоги. Смотри наше ЧаВо: Как удалить каталог и вложенные в него каталоги и файлы?


Пустые тоже не удаляются, пробовал уже... {я для проверки создал новую пустую папку, как и для проверки удаления файла.... не целевые же обьекты пробовать удалять.}

А нет, удаляет, прошу прощения :( совсем запарился, а то бы уже давно все сам решил как быть с эти... :)
Спасибо за помощь позже выложу свой код для этого действия, мало ли кому понадобиться.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
enslaver
  опции профиля:
сообщение 6.4.2010, 21:33
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 25.3.2010
Пользователь №: 1565

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(enslaver @ 31.3.2010, 17:39) *
Цитата(Litkevich Yuriy @ 31.3.2010, 2:19) *
Цитата(enslaver @ 31.3.2010, 4:37) *
а вот директорию вообще не удаляет ни одной из команд
удаляются только пустые каталоги. Смотри наше ЧаВо: Как удалить каталог и вложенные в него каталоги и файлы?


Пустые тоже не удаляются, пробовал уже... {я для проверки создал новую пустую папку, как и для проверки удаления файла.... не целевые же обьекты пробовать удалять.}

А нет, удаляет, прошу прощения :( совсем запарился, а то бы уже давно все сам решил как быть с эти... :)
Спасибо за помощь позже выложу свой код для этого действия, мало ли кому понадобиться.


bool MainWindow::DeletSelection(QString path)
{
    QDir oDir(path);
    QStringList files = oDir.entryList(QDir::Files | QDir::Hidden |QDir::System);

    QStringList::Iterator itFile = files.begin();
    while (itFile != files.end())
    {
        QFile oFile(path + "/" + *itFile);
        oFile.remove();
        ++itFile;
    }

    QStringList dirs = oDir.entryList(QDir::Dirs | QDir::Hidden |QDir::System);
    QStringList::Iterator itDir = dirs.begin();
    while (itDir != dirs.end())
    {
        if (*itDir != "." && *itDir != "..") DeletSelection(path + "/" + *itDir);
        ++itDir;
    }

    return oDir.rmdir(path);
}


отличается тем что удаляет скрытые директории и файлы(включая системные), что не реализовано в том коде что указан по ссылке(Я пользуюсь Linux)

П.С. сам тоже мучался, но так и не понял в чем у меня ошибка, даже заключая в цикл почему выполнялся только 1 заход и все висло пи удалении директории, будет время еще подумаю а пока воспользовался готовым вариантом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 17:07