Версия для печати темы
Форум на 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)