|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Языки программирования Изучаем С++, Sql, php, Lua, Python |
|
Опции темы | Поиск в этой теме | Опции просмотра |
02.04.2013, 08:06 | #1 |
Пользователь
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
|
Прогресс загрузки
Всем доброе время суток. Я только недавно начал изучать С++, сильно не ругайте, просто действительно не первый день мучаюсь, невыходит.
каким образом можно реализовать прогресс загрузки архива? Работаю в билдере6. Да есть опция прогресс бара, но скачивание происходит по нажатию кнопки. Каким образом можно вызвать модальное окно с загрузкой в прогрессбар? Скачиваю архив таким образом: Код:
TFileStream* fs = new TFileStream("имя_архива_на диске.zip", fmCreate|fmOpenWrite); // IdHTTP1->Get("http://site.com/имя_архива_на_сервере.zip", fs); delete fs; // далее идет извлечение архива и другие действия |
02.04.2013, 08:14 | #2 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
И это печально.
По существу, прогресс загрузки это событийный процесс. Например в Qt прогрессбар привязывается к событию onDataAvailable() в котором передается размер полученых данных и полный размер итоговых данных. Из которых вычисляется размерность прогрессбара и его заполнение при получении данных. Думаю в билдере точно так же только со своими тараканами. Ищите привязку по событию.
__________________
SpellWork Qt4 |
02.04.2013, 08:36 | #3 | |
Пользователь
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
|
|
02.04.2013, 09:02 | #4 | |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
Цитата:
странное сравнение... Прогрессбар, используя винапи, можно сделать на чем угодно. На qt - кроссплатформенно. Тебе бы на другой форум( либо книжками завалится), поближе к своей тематике. |
|
02.04.2013, 09:50 | #5 | |
Пользователь
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
ЗЫ. Понравилась интеграция с git, mercurial и т.п. Удобно сделано |
|
02.04.2013, 09:58 | #6 | ||
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Цитата:
Добавлено через 4 минуты Цитата:
https://bitbucket.org/sidsukana/qsw/...orm.cpp#cl-143 Функция void SWUpdateForm::updateSoftware() Прошу прощения, событие называется downloadProgress() но сути это не меняет. Оно привязывается к слоту, в котором идет обновление показания прогресс бара на основе полученных данных.
__________________
SpellWork Qt4 Последний раз редактировалось Sid; 02.04.2013 в 10:00. |
||
02.04.2013, 10:15 | #7 | |
Пользователь
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Сейчас пробывал создать второй (пустой) проект, так даже в откладке теперь запускать нехочет( хотя первый созданный запустился. Код:
Не удалось запустить программу. Путь или права недопустимы? C:\Users\Admin\Desktop\asd\asd-build\debug\Updater.exe завершился с кодом -1 |
|
02.04.2013, 11:03 | #8 | |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
Цитата:
Посмотрите другие созданные темы пользователя Visible. Человек учится работать в билдере...и это печально. Единственно адекватный способ сделать процесс использования такого приложения проще - использовать винапи. Конкретно - не надо будет качать и таскать борландовские библиотеки( встроенные контролы). Процесс загрузки - такой каким его напишет программист. Если в qt используется событийная модель и обертка вокруг процесса загрузки, то это не значит, что так везде. зы линк на попытки человека сделать в билдере http://www.programmersforum.ru/showthread.php?t=187852 ззы мне удобнее использовать wget для закачки файлов - существует и для виндовса. Показывает прогрессбар. Если целью автора ставится изучение с++ как такового, то все же я бы советовал прочитать книги или пройти онлайн курсы в интернете. Код не мой, собрал - работает (gcc -mwindows -s main.cpp -Wall -O3 -o main.exe 10кб) ззы Код:
#include <windows.h> #include <commctrl.h> #define PBS_MARQUEE 0x08 #define PBS_SMOOTH 1 #define PBS_SMOOTHREVERSE 0x10 #define COLOR_3DFACE 15 #define PBM_SETMARQUEE (WM_USER + 10) LRESULT CALLBACK Func(HWND, UINT, WPARAM, LPARAM); INT registerWindow(PCSTR , WNDPROC , HBRUSH ); HINSTANCE hInstanceProgram; HWND hWndProgressBar, hWndMain; INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, INT nFunsterStil) { MSG message; hInstanceProgram = hInstance; if (registerWindow("MyClass", Func, GetSysColorBrush(COLOR_3DFACE))) return 0; hWndMain = CreateWindowEx(0, "MyClass", "Progress Bar", WS_CAPTION | WS_SYSMENU | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hWndMain, nFunsterStil); while (GetMessage(&message, NULL, 0, 0)) { TranslateMessage(&message); DispatchMessage(&message); } return message.wParam; } INT registerWindow(PCSTR lpszClassName, WNDPROC lpfnWndProc, HBRUSH hbrBackground) { WNDCLASSEX wndClassEx; ZeroMemory(&wndClassEx, sizeof(WNDCLASS)); wndClassEx.hInstance = hInstanceProgram; wndClassEx.lpszClassName = lpszClassName; wndClassEx.lpfnWndProc = lpfnWndProc; wndClassEx.style = CS_DBLCLKS; wndClassEx.cbSize = sizeof(WNDCLASSEX); wndClassEx.hIcon = NULL; wndClassEx.hIconSm = NULL; wndClassEx.hCursor = LoadCursor(NULL, IDC_ARROW); wndClassEx.lpszMenuName = NULL; wndClassEx.cbClsExtra = 0; wndClassEx.cbWndExtra = 0; wndClassEx.hbrBackground = hbrBackground; if (RegisterClassEx(&wndClassEx)) return 0; return 1; } LRESULT CALLBACK Func(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: hWndProgressBar = CreateWindowEx(0, PROGRESS_CLASS, "", WS_CHILD | WS_VISIBLE | PBS_MARQUEE |PBS_SMOOTHREVERSE, 148, 8, 160, 16, hWnd, NULL, hInstanceProgram, NULL); SetTimer(hWnd, 1, 100, NULL); SendMessage(hWndProgressBar, PBM_SETMARQUEE, TRUE, 100); break; case WM_DESTROY: KillTimer(hWnd, 1); PostQuitMessage(0); break; case WM_TIMER: SendMessage(hWndProgressBar, PBM_STEPIT, 0, 0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } Последний раз редактировалось Evgeniy; 02.04.2013 в 12:04. |
|
02.04.2013, 14:54 | #9 |
Пользователь
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
|
Попробовал пособирать различные программы, ни одна не работает без библиотек. Это же очень неудобно, "таскать их с собой". Есть же наверно какой то выход? другие приложения собранные в других компиляторах работают без доп. библиотек.
|
02.04.2013, 16:56 | #10 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
Да, есть.... Собрать заново проект Qt (на сайте можно скачать surse code), и линковать библиотечки статически. Прочитать про это можно тут тык! Я правда пока сам не пробовал, но мне Qt 4.8 нравится больше чем Qt 5, так как в Qt 5 еще больше библиотечек надо пихать с прогой.
__________________
sql-language.ru Последний раз редактировалось lovepsone; 02.04.2013 в 17:00. |
02.04.2013, 17:29 | #11 | |
Пользователь
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Уже нашел, ненадо Последний раз редактировалось Visible; 02.04.2013 в 17:32. |
|
04.04.2013, 19:49 | #12 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Если статически линковать либы с бинарником, то его размер будет катастрофических размеров
__________________
SpellWork Qt4 |
Пользователь сказал cпасибо: | Visible (04.04.2013) |
05.04.2013, 15:07 | #13 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
Ну это минусы Qt'a... Зато плюсы у него большие... Хотя вы сами знаете... Ваша разработка по спеллворку меня подбила на Qt, за это вам спасибо!
__________________
sql-language.ru |
05.04.2013, 15:19 | #14 |
Пользователь
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
|
а я все таки решил на VSE пользоваться как в старые добрые времена компилил мангос. Пусть нет IDE, но мне нравится. Чем сложнее учиться, тем лучше понимание. Как всегда.
|
05.04.2013, 16:17 | #15 |
Пользователь
Регистрация: 26.03.2010
Сообщений: 40
Сказал(а) спасибо: 12
Поблагодарили 4 раз(а) в 4 сообщениях
|
Тогда уж и блокнот покатит. Максимум понимания.
|
05.04.2013, 19:21 | #16 |
Пользователь
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Бот как инструмент для загрузки | Mediv | Флудильня | 10 | 07.07.2011 15:43 |
[10893][patch]Оптимизация загрузки gossip_menu_option | Warlord123 | Принятые патчи | 1 | 19.12.2010 20:54 |
вырубается мир после загрузки | kartez | Установка MaNGOS | 19 | 09.06.2010 15:46 |