crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 17:49