Поиск:

Ответ в темуСоздание новой темы Создание опроса
> qfilesystemmodel+прогресс бар 
:(
    Опции темы
math64
Дата 1.6.2014, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



В этом случае нужен аналогичный код. Нужно периодически вызывать QApplication::processEvents(); и проверять на отмену копирования.

PM   Вверх
koldun90
Дата 6.6.2014, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 16.5.2014

Репутация: нет
Всего: нет



Помогите возникает ошибка деления на ноль
Код

for (int i=0;i<path.size();i++)  // проходимся в цикле по всем элементам и считаем их общий вес
                {
                    QString str=path[i];
                    vsefaily=vsefaily+razmer_failov(str);   //метод razmer_failov рассчитывающий общий вес он правильный это точно возвращает вес всех папок и файлов в байтах
                }
 
              schetchik=0;
                int firsttime=t->elapsed(); берем время до начала копирования
                for (int i=0;i<path.size();i++)  проходимся по всем элементам списка для их копирования
                {
 
                        QString str=path[i];   //берем элемент
                        QFileInfo tr(str);    /
                        QString base_name=tr.fileName();  // берем базовое имяфала папки
                        if (tr.isFile())  //если файл то копируем
                        {
                              QFile file;
                              bool ee=file.copy(str,path2[0]+"/"+base_name);   //
                              if (ee) // в случае успешного копирования
                              {
                                  unsigned long long gt=tr.size();  // берем размер файла
                                  copiedsize=copiedsize+gt;  // copiedsize буфер в него добавляем каждый раз размер файла что уже скопировано
                                  speed=copiedsize/(t->elapsed()-firsttime);   // рассчитываем скоростьто что уже скопировано делим на разницу текущего времени-время с начала копирования
                                  if (copiedsize==0)
                                  {
                                      msg.setText(QString::fromLocal8Bit("Размер скопированного 0"));
                                      msg.exec();
                                  }
 
                                  if (t->elapsed()==0)
                                  {
                                      msg.setText(QString::fromLocal8Bit("Прошедшее время 0"));
                                      msg.exec();
                                  }
                                  if (speed==0)
                                  {
                                      msg.setText(QString::fromLocal8Bit("Скорость равна 0"));
                                      msg.exec();
                                  }
                                  else
                                  {
                                      elapsedtime=(vsefaily-copiedsize)/speed;    // Вычисляем оставшееся время vsefaily-размер всех файлов которые мы копируем- точто уже скопировано делим на скорость
                                  }
                                  elapsedtime=(vsefaily-copiedsize)/speed;    // оставшееся время
                                  schetchik=schetchik+1;
                                  emit progkop(vsefaily,copiedsize,speed,elapsedtime,gt,kolvofailov,schetchik); передаем все это дело на прогресс бар
                          }
                        }
                        if (tr.isDir())  //ЕУМЙ ЧЩВТБООЩК ПВЯЕЛФ СЧМСЕФУС РБРЛПК
                        {  // ФП ЛПРЙТХЕН РБРЛХ
                              emit vstpapka(str,path2[0]+"/"+base_name);   //ЪБРХУЛ ТЕЛХТУЙЧОПЗП ЛПРЙТПЧБОЙС РБРЛЙ
                        }
                }
            }


Так вот проблема в следующем прогоняю я программу в отладчике копирует файл все нормально Но

Код

if (copiedsize==0)  
 {
       msg.setText(QString::fromLocal8Bit("Размер скопированного 0"));
       msg.exec();
 }      

Это условие НЕ выполняется значит сopiedsize не равен 0
затем
Код

if (t->elapsed()==0)
{
      msg.setText(QString::fromLocal8Bit("Прошедшее время 0"));
      msg.exec();
}    

// это условие не выполняется значит время он отсчитывает правильно //t->start я вызываю в конструкторе mainwindow

Но когда очередь доходит до этого условия
Код

if (speed==0)
{
      msg.setText(QString::fromLocal8Bit("Скорость равна 0"));
      msg.exec();
}

Почему то это условие истинно . То есть скорость почему то становится равной 0
Код

speed=copiedsize/(t->elapsed()-firsttime);


и соответственно на строке
Код

elapsedtime=(vsefaily-copiedsize)/speed;

вылетает sigfpe arithmetic exception ошибка деления на ноль собственно я не знаю почему у меня такая проблема почему speed=0 ?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.