Russian Qt Forum
Ноябрь 14, 2024, 22:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QFile::copy - обработка событий.  (Прочитано 5075 раз)
pashazz
Гость
« : Июнь 12, 2010, 23:43 »

Интересуют 2 вопроса.
Во-первых, как избежать GUI freeze во время копирования файлов (ну тут я думаю можно QEventLoop использовать примерно так:)
Код
C++ (Qt)
QEventLoop loop;
loop.exec();
file.copy ("blablabla");
loop.quit();
 

Во-вторых, как немедленно прервать копирование файла?
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #1 : Июнь 13, 2010, 00:06 »

1. Для опроса событий qApp->processEvents(), можно например на таймер его кинуть. Или вообще, копировать в отдельном потоке.
2. Опять же, если в отдельном потоке - terminate() его. Но последствия...
« Последнее редактирование: Июнь 13, 2010, 00:10 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
zenden
Гость
« Ответ #2 : Июнь 13, 2010, 00:19 »

1. QThread или QtConcurrent
2. Унаследоваться от QFile, переопределить atEnd () и/или readData, где проверять некоторую переменную-флаг, которую изменять в основном потоке, скажем, по нажатию кнопки.
Записан
ритт
Гость
« Ответ #3 : Июнь 13, 2010, 00:43 »

под вендой - пользовать натив апи
под лялихами подобного не встречал (мб даже не существует), но всегда можно написать собственную реализацию, поддерживающую асинхронные операции и отмену...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Июнь 13, 2010, 04:42 »

Интересуют 2 вопроса.
Во-первых, как избежать GUI freeze во время копирования файлов (ну тут я думаю можно QEventLoop использовать примерно так:)
Код
C++ (Qt)
QEventLoop loop;
loop.exec();
file.copy ("blablabla");
loop.quit();
 

Во-вторых, как немедленно прервать копирование файла?
Ну loop.exec() не вернет управление пока не закончится, поэтому затея не годится. Вообще если использовать ф-цию copy, то на оба вопроса ответ "никак". Надо писать свою ф-цию копирования (примерно 30-40 строк), там пожалуйста.
Записан
niXman
Гость
« Ответ #5 : Июнь 14, 2010, 14:26 »

http://www.prog.org.ru/index.php?topic=13968.msg90968#msg90968
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.179 секунд. Запросов: 22.