Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: minigo от Апрель 14, 2011, 16:37



Название: QProgressDialog в отдельном потоке
Отправлено: minigo от Апрель 14, 2011, 16:37
Всем доброго времени суток.

Подскажите, у меня в приложении есть определённые расчёты, занимающие по полминуты иногда минуту. Раньше, когда комплекс был написан на MFC я для отображения процесса расчёта (без точного указания времени) запускал диалоговое окно в котором запускался отдельный поток, который в свою очередь обновлял прогресбар. причём этот диалог был модальный (что очень важно)! Возможно либ подобное сделать в Qt ?


Название: Re: QProgressDialog в отдельном потоке
Отправлено: Пантер от Апрель 14, 2011, 16:39
Расчеты в отдельном потоке, откуда сигналишь основному потоку о процентах выполнения.


Название: Re: QProgressDialog в отдельном потоке
Отправлено: minigo от Апрель 14, 2011, 16:45
Расчеты в отдельном потоке, откуда сигналишь основному потоку о процентах выполнения.

Расчёты поставляются в виде отдельной длл, поэтому ничего отсылать не могу. Переносить расчёты из основного потока в отдельный пока тоже затруднительно, поэтому ищу промежуточное решение когда модальный прогрессдиалог заблочит всё приложение на время расчётов.


Название: Re: QProgressDialog в отдельном потоке
Отправлено: RedDog от Апрель 14, 2011, 16:55
Вызов ф-ции из длл делать в отдельном потоке, и из него слать сигналы в модальную форму (которая этот отдельный поток и породит)


Название: Re: QProgressDialog в отдельном потоке
Отправлено: minigo от Апрель 14, 2011, 17:00
Вызов ф-ции из длл делать в отдельном потоке, и из него слать сигналы в модальную форму (которая этот отдельный поток и породит)

вызов алгоритма расчёта - это один метод и его прогресс оценить невозможно. В метод расчёта уходит порядка 10 различных объектов, первоначально никто не планировал ставить на них всех мютексы и т.д., поэтому вывести расчёты в отдельный поток не получается (либо на пару недель зависну), поэтом мне и нужно быстрое промежуточное решение.


Название: Re: QProgressDialog в отдельном потоке
Отправлено: mutineer от Апрель 14, 2011, 17:03
А как ты раньше выполнял его в отдельном потоке и прогресс оценивал?


Название: Re: QProgressDialog в отдельном потоке
Отправлено: minigo от Апрель 14, 2011, 17:16
А как ты раньше выполнял его в отдельном потоке и прогресс оценивал?

Раньше у меня был диалог, который создавал отдельный поток и в этом потоке обрабатывался прогрессбар. Этот диалог был модальный. А в основном потоке работали расчёты. Это я замутил на MFC. А прогресс я не оценивал, это типа busy indicator


Название: Re: QProgressDialog в отдельном потоке
Отправлено: Fess от Апрель 15, 2011, 08:52
ставь для QProgressBar min и max в 0 и будет BusyIndicator.
Или прикрути вот это: http://qt-apps.org/content/show.php/QProgressIndicator?content=115762
на модальную форму.


Название: Re: QProgressDialog в отдельном потоке
Отправлено: Авварон от Апрель 15, 2011, 09:25
QApplication::processEvents
а вообще необязательно делать мьютексы, если запись и чтение происходит лишь из одного потока в один момент времени (пока висит модал диалог мы не трогаем данные и ждем конца вычислений)