crossplatform.ru

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


  Ответ в ListView & QDirModel
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
enslaver Дата 6.4.2010, 21:33
 
Цитата(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 заход и все висло пи удалении директории, будет время еще подумаю а пока воспользовался готовым вариантом.
enslaver Дата 31.3.2010, 17:39
 
Цитата(Litkevich Yuriy @ 31.3.2010, 2:19) *
Цитата(enslaver @ 31.3.2010, 4:37) *
а вот директорию вообще не удаляет ни одной из команд
удаляются только пустые каталоги. Смотри наше ЧаВо: Как удалить каталог и вложенные в него каталоги и файлы?


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

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

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

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

false и не выполняется (но с QDir все работает)
а вот директорию вообще не удаляет ни одной из команд
Litkevich Yuriy Дата 30.3.2010, 21:52
 
Цитата(enslaver @ 31.3.2010, 1:32) *
DirModel->remove(ListView->currentIndex())
что возвращает эта функция?

П.С, если мне не изменяет память, то QFileSystemModel рекомендован на замену QDirModel
enslaver Дата 30.3.2010, 21:32
 
Цитата(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, 20:40
  Почему у тебя операция ИЛИ используется?
ЕСЛИ НЕ DirModel->isDir(ListView->currentIndex()) ИЛИ DirModel->remove(ListView->currentIndex()) ТО
...
enslaver Дата 30.3.2010, 20:32
  Имеем код
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());
}

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

В чем моя ошибка, какие будут предложения...?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 2:46