![]() |
|
|
![]()
|
|
| koldun90 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 16.5.2014 Репутация: нет Всего: нет |
Здравствуйте у меня два вопроса:
1) Скажите что лучше использовать для отображения прогресса копирования файла в директории лучше использовать qprogressdialog или qprogressbar? Потом как реализовать прогресс бар чтобы он показывал время сколько осталось до окончания копирования и скорость? 2)Мне нужно изменить отрисовку папок qfilesystemmodel я соответственно нашел в интернете что надо наследоваться и переопределить метод data myqfilesystemmodel.h
myqfilesystemmodel.cpp
соответственно конструктор mainwindow.cpp
Соответственно проблема у меня такая вот скриншот как выглядят папки Но мне нужно чтобы значок папки отображался только в первом столбце(как и в стандартной qfilesystemmodel) , а не во всех как мне это сделать? Это сообщение отредактировал(а) koldun90 - 25.5.2014, 19:54 |
||||||
|
|||||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Ответ на второй вопрос:
Первого вопроса не понял... QProgressBar - это просто "полоска" с индикатором процента выполнения. QProgressDialog - это окошко с QProgressBar'ом и кнопкой "Отмена", на которую можно подписаться и завершить работу.
Для начала нужно вычислить полный объём, занимаемый всеми файлами, затем при копировании очередного файла добавить его размер к тому, что уже скопировалось и разделить на общее время, прошедшее с начала копирования. Получишь скорость копирования. Разделив оставшийся объём на эту скорость получишь оставшееся время. Псевдо код:
Это сообщение отредактировал(а) borisbn - 26.5.2014, 08:27 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| koldun90 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 16.5.2014 Репутация: нет Всего: нет |
а как считаете что лучше использовать для отображения процесса копирования qprogressdialog или qprogressbar? Также какой компонент использовать для отчета времени? и скажи как мне сделать чтобы qfilesystemmodel отображал только каталог /mnt? (куда примонтируются внешние носители) Это сообщение отредактировал(а) koldun90 - 26.5.2014, 19:37 |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Если нужно, чтобы процесс можно было прервать, то QProgressDialog. QLabel
QFileSystemModel::setRootPath А самому по документации (кстати, одной из лучших) трудно поискать ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| koldun90 |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 16.5.2014 Репутация: нет Всего: нет |
А не подскажете вот вы написали вот часть кода
я так понял i- это как бы счетчик? ТЕ мы как бы после копирования первого файла делаем так 1/размер файла(в байтах) * 100? те у нас прогресс бар заполняется как бы так да
потом второй файл
и так далее да? и скажите 100 мы умножаем на числитель или знаменатель? |
||||||||||||
|
|||||||||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
В знаменателе не размер файла, а общее количество файлов. i/кол-во файлов × 100 - это сколько файлов уже скопировалось в процентах от общего количества.
На 100 умножается результат деления i на знаменатель. Т.е. на числитель -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| koldun90 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 16.5.2014 Репутация: нет Всего: нет |
вроде реализовал по вашему но
мне кажется i должно быть в начале установлено в единицу а не в ноль |
||||
|
|||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Согласен. А ещё лучше так сделать:
а i вообще убрать -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| koldun90 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 16.5.2014 Репутация: нет Всего: нет |
но я так понял это как бы примитивный прогресс бар.. те допустим скопировали мы этот файл и увеличили как бы процент чтоль от общего числа файлов допустим: копируем 5 файлов: 1)Прогресс бар увеличивается после копирования 1 файла (1/5)*100=20 процентов 2) 40 3) 60 и тд ну вы поняли а допустим возможно сделать так: к примеру я копирую файл 4 Gb и мне же нужно как бы чтоб он отображал процесс копирования всех этих 4 GB вот так допустим ![]() те отображается полоска которая сколько скопировано мегабайт в файле |
||||||
|
|||||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
В таком случае showProgress() должен вызываться из copyFile() после копирования порции данных.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
> В таком случае showProgress() должен вызываться из copyFile()
Тогда уж из CopyFileEx Хотя, судя по > как мне сделать чтобы qfilesystemmodel отображал только каталог /mnt? у ТС Linux, а как там это делается - я хз(( -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
copyFile() - не системная функция, метод класса, который вручную копирует файл
|
|||
|
||||
| koldun90 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 16.5.2014 Репутация: нет Всего: нет |
вообщем у меня в итоге небольшая проблемка возникла
вот часть кода которая запускает копирование mainwindow.cpp
progressdialog.cpp
так вот проблема в следующем что появляется окно как бы допустим копирую 5 файлов. Соответственно копируется 5 файлов и прогресс бар сразу на 100 а должно быть так 20 40 60 80 100. ТО прогресс бар как бы не заполняется постепенно 20 40 и тд. А прям мгновенно до 100 процентов Как мне это исправить? все переменный rt и kolvo failov верны распечатывал допустим копирую 5 файлов: 1) на первом шаге rt =1 kolvofailov=5 20 проц 2) rt=2 kolvofailov=5 40 проц 3)rt=3 kolvofailov=5 60 проц 4)rt=4 kolvofailov=5 80 проц 5) rt=5 kolvofailov=5 100 проц Так вот что мне делать то ведь прогресс бар не заполнятеся 20 40 60 80 100 а он сразу на 100 процентов Это сообщение отредактировал(а) koldun90 - 1.6.2014, 12:54 |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Промежуточные результаты не успевают отображаться.
Если используется QProgressDialog нужно делать так:
Добавлено через 9 минут и 16 секунд но лучше делать на отдельной нити или использовать QtConcurent - тогда можно копировать одновременно несколько файлов - нужно переделать пример Qt с загрузкой рисунков. |
|||
|
||||
| koldun90 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 16.5.2014 Репутация: нет Всего: нет |
использую qprogressbar |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
В этом случае нужен аналогичный код. Нужно периодически вызывать QApplication::processEvents(); и проверять на отмену копирования.
|
|||
|
||||
| koldun90 |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 16.5.2014 Репутация: нет Всего: нет |
Помогите возникает ошибка деления на ноль
Так вот проблема в следующем прогоняю я программу в отладчике копирует файл все нормально Но
Это условие НЕ выполняется значит сopiedsize не равен 0 затем
// это условие не выполняется значит время он отсчитывает правильно //t->start я вызываю в конструкторе mainwindow Но когда очередь доходит до этого условия
Почему то это условие истинно . То есть скорость почему то становится равной 0
и соответственно на строке
вылетает sigfpe arithmetic exception ошибка деления на ноль собственно я не знаю почему у меня такая проблема почему speed=0 ? |
||||||||||||
|
|||||||||||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |