Название: [РЕШЕН] прогресс копирования Отправлено: tornadodead от Март 02, 2012, 09:06 нужно организовать визуальный прогресс копирования
есть функция копирования Код: bool FileManager::copyFolder(QString sourceFolder, QString destFolder) как в прогресс отображать ход копирования? Думаю, нужно знать общее число файлов, и при копирование очередного файла обновлять прогреес. Дело в том, что если файлов может быть много тогда, рекурсия подсчета займет прилично времени. И как-то функция копирования должна возвращать, что очередной файл был скопирован. Что посоветуете думаю что, уже многие что-то подобное делали. Название: Re: прогресс копирования Отправлено: Пантер от Март 02, 2012, 09:26 Читай про сигналы/слоты.
Сначала считаешь количество файлов, потом, при копировании очередного файла, кидаешь об этом сигнал. Название: Re: прогресс копирования Отправлено: tornadodead от Март 02, 2012, 10:00 Читай про сигналы/слоты. т.е. в функции копирования, реализовать этот сигнал?Сначала считаешь количество файлов, потом, при копировании очередного файла, кидаешь об этом сигнал. Название: Re: прогресс копирования Отправлено: Пантер от Март 02, 2012, 10:02 Да. Как только файл скопировался, эмитишь сигнал об этом.
Название: Re: прогресс копирования Отправлено: tornadodead от Март 02, 2012, 10:24 Да. Как только файл скопировался, эмитишь сигнал об этом. в методе copyFolder я сделал emit сигнала, а теперь мне как все это дело получить в окне где прогрее идет, так-же в каждом классе емитить?Название: Re: прогресс копирования Отправлено: Пантер от Март 02, 2012, 10:34 Коннектишь сигнал на слот и в нем выставляешь нужный прогресс. В чем сложности?
Название: Re: прогресс копирования Отправлено: tornadodead от Март 02, 2012, 10:39 Коннектишь сигнал на слот и в нем выставляешь нужный прогресс. В чем сложности? в том что в классе где идет вызов копирования я не могу вызвать этот сигнал, или чет не до понимаю!!!FileManager- класс который копирует, и содержит сигнал connect("FileManager",SIGNAL) и нет этого сигнала=( Название: Re: прогресс копирования Отправлено: Пантер от Март 02, 2012, 10:46 Показывай код.
Название: Re: прогресс копирования Отправлено: tornadodead от Март 02, 2012, 10:49 Показывай код. вот у меня поток где вызываю копирование Код: void ThreadCopy::run(){ connect(f,SIGNAL(copyDone()),...,....), так? Название: Re: прогресс копирования Отправлено: Пантер от Март 02, 2012, 10:54 connect (&f, SIGNAL (progress (int, int)), SLOT (progress (int, int))
Название: Re: прогресс копирования Отправлено: tornadodead от Март 02, 2012, 11:01 connect (&f, SIGNAL (progress (int, int)), SLOT (progress (int, int)) да говорю вылетает ошибкаошибка: no matching function for call to 'ThreadCopy::connect(FileManager*, const char [12], const char [15])' connect(&f,SIGNAL(copyDone()),SLOT("какойто слот")); а чтоб до прогреесбар добраться, нужно еще на один уровень выше, т.е. к диалоговому окну=) Название: Re: прогресс копирования Отправлено: mutineer от Март 02, 2012, 11:20 connect (&f, SIGNAL (progress (int, int)), SLOT (progress (int, int)) да говорю вылетает ошибкаошибка: no matching function for call to 'ThreadCopy::connect(FileManager*, const char [12], const char [15])' connect(&f,SIGNAL(copyDone()),SLOT("какойто слот")); а чтоб до прогреесбар добраться, нужно еще на один уровень выше, т.е. к диалоговому окну=) Ошибка, потому что твой ThreadCopy не отнаследован от QObject. вызывай QObject::connect, а не connect Название: Re: прогресс копирования Отправлено: tornadodead от Март 02, 2012, 11:46 Ошибка, потому что твой ThreadCopy не отнаследован от QObject. вызывай QObject::connect, а не connect а вот и нет, не в этом делоНазвание: Re: прогресс копирования Отправлено: mutineer от Март 02, 2012, 11:50 Ошибка, потому что твой ThreadCopy не отнаследован от QObject. вызывай QObject::connect, а не connect а вот и нет, не в этом делоНу или FileManager не отнаследован от QObject Название: Re: прогресс копирования Отправлено: tornadodead от Март 02, 2012, 12:21 ок, заработало, есть еще один ньюансик, я делаю emit copyDone();
и затем в классе Код: connect(&f,SIGNAL(copyDone()),SLOT(my_slot())); Название: Re: прогресс копирования Отправлено: mutineer от Март 02, 2012, 12:23 ок, заработало, есть еще один ньюансик, я делаю emit copyDone(); и затем в классе Код: connect(&f,SIGNAL(copyDone()),SLOT(my_slot())); connect нужно вызвать до первого эмита сигнала. затем при emit copyDone() будет вызываться my_slot() Название: Re: прогресс копирования Отправлено: tornadodead от Март 02, 2012, 12:29 connect нужно вызвать до первого эмита сигнала. затем при emit copyDone() будет вызываться my_slot() ну точно-же, ух и сглупил=))) Благодарю за помощь! |