Russian Qt Forum

Qt => Общие вопросы => Тема начата: pashazz от Июнь 12, 2010, 23:43



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

Во-вторых, как немедленно прервать копирование файла?


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


Название: Re: QFile::copy - обработка событий.
Отправлено: zenden от Июнь 13, 2010, 00:19
1. QThread или QtConcurrent
2. Унаследоваться от QFile, переопределить atEnd () и/или readData, где проверять некоторую переменную-флаг, которую изменять в основном потоке, скажем, по нажатию кнопки.


Название: Re: QFile::copy - обработка событий.
Отправлено: ритт от Июнь 13, 2010, 00:43
под вендой - пользовать натив апи
под лялихами подобного не встречал (мб даже не существует), но всегда можно написать собственную реализацию, поддерживающую асинхронные операции и отмену...


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

Во-вторых, как немедленно прервать копирование файла?
Ну loop.exec() не вернет управление пока не закончится, поэтому затея не годится. Вообще если использовать ф-цию copy, то на оба вопроса ответ "никак". Надо писать свою ф-цию копирования (примерно 30-40 строк), там пожалуйста.


Название: Re: QFile::copy - обработка событий.
Отправлено: niXman от Июнь 14, 2010, 14:26
http://www.prog.org.ru/index.php?topic=13968.msg90968#msg90968