Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Модель/Представление _ ListView & QDirModel

Автор: 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());
}

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

В чем моя ошибка, какие будут предложения...?

Автор: Litkevich Yuriy 30.3.2010, 20:40

Почему у тебя операция ИЛИ используется?
ЕСЛИ НЕ DirModel->isDir(ListView->currentIndex()) ИЛИ DirModel->remove(ListView->currentIndex()) ТО
...

Автор: 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, 21:52

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

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

Автор: enslaver 31.3.2010, 0:37

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

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

false и не выполняется (но с QDir все работает)
а вот директорию вообще не удаляет ни одной из команд

Автор: Litkevich Yuriy 31.3.2010, 2:19

Цитата(enslaver @ 31.3.2010, 4:37) *
а вот директорию вообще не удаляет ни одной из команд
удаляются только пустые каталоги. Смотри наше ЧаВо: http://wiki.crossplatform.ru/index.php/Qt/FAQ/QtCore#.D0.A3.D0.B4.D0.B0.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B4.D0.B8.D1.80.D0.B5.D0.BA.D1.82.D0.BE.D1.80.D0.B8.D0.B8_.D1.81_.D0.BF.D0.BE.D0.B4.D0.B4.D0.B8.D1.80.D0.B5.D0.BA.D1.82.D0.BE.D1.80.D0.B8.D1.8F.D0.BC.D0.B8_.D0.B8_.D1.84.D0.B0.D0.B9.D0.BB.D0.B0.D0.BC.D0.B8

Автор: enslaver 31.3.2010, 17:39

Цитата(Litkevich Yuriy @ 31.3.2010, 2:19) *
Цитата(enslaver @ 31.3.2010, 4:37) *
а вот директорию вообще не удаляет ни одной из команд
удаляются только пустые каталоги. Смотри наше ЧаВо: http://wiki.crossplatform.ru/index.php/Qt/FAQ/QtCore#.D0.A3.D0.B4.D0.B0.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B4.D0.B8.D1.80.D0.B5.D0.BA.D1.82.D0.BE.D1.80.D0.B8.D0.B8_.D1.81_.D0.BF.D0.BE.D0.B4.D0.B4.D0.B8.D1.80.D0.B5.D0.BA.D1.82.D0.BE.D1.80.D0.B8.D1.8F.D0.BC.D0.B8_.D0.B8_.D1.84.D0.B0.D0.B9.D0.BB.D0.B0.D0.BC.D0.B8


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

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


Автор: 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) *
а вот директорию вообще не удаляет ни одной из команд
удаляются только пустые каталоги. Смотри наше ЧаВо: http://wiki.crossplatform.ru/index.php/Qt/FAQ/QtCore#.D0.A3.D0.B4.D0.B0.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B4.D0.B8.D1.80.D0.B5.D0.BA.D1.82.D0.BE.D1.80.D0.B8.D0.B8_.D1.81_.D0.BF.D0.BE.D0.B4.D0.B4.D0.B8.D1.80.D0.B5.D0.BA.D1.82.D0.BE.D1.80.D0.B8.D1.8F.D0.BC.D0.B8_.D0.B8_.D1.84.D0.B0.D0.B9.D0.BB.D0.B0.D0.BC.D0.B8


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

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


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 заход и все висло пи удалении директории, будет время еще подумаю а пока воспользовался готовым вариантом.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)