Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2015, 15:40   #1
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию Тяжелая функция Qt

Qt
В программе ест функция в которой происходят длитильные вычисления, до десятков секунд. Естественно GUI, при этом не отвечает.
Так вот, надо, что бы при вызове этой функции открывалось окно с надписью "подождите" или что то вроде. Что бы пользователь не думал что программа зависла.
GUI при этом работать не должен.
Мне в голову приходит только одно- Создать модальное диалоговое окно. В этом классе вызвать функцию, в отдельном потоке. После завершения работы функции, закрыть диалог, а результат передать классу родительского окна.
Может это кривое решение? и есть более изящные способы решения проблемы?

Последний раз редактировалось SAMOUCHKA; 02.10.2015 в 15:18.
SAMOUCHKA вне форума Ответить с цитированием
Старый 01.10.2015, 16:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Может это кривое решение?
По-моему нормальное.
Я бы наверное извратнулся: Сделал бы некую панель, на которую поместил бы картинку. Панель скрыл. Когда пришло бы время запускать тяжелый процесс панель бы активировал и поставил поверх всех компонентов формы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2015, 00:17   #3
Avazart
Форумчанин
 
Аватар для Avazart
 
Регистрация: 13.08.2011
Сообщений: 184
По умолчанию

Зачем модальный диалог?
Avazart вне форума Ответить с цитированием
Старый 02.10.2015, 00:21   #4
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

У меня невидимый статик на верхнем Z в размер окна с надписью мол ждите. Перед длительными операциями операциями делаю видимым, после скрываю.
ResourceSpace вне форума Ответить с цитированием
Старый 02.10.2015, 00:25   #5
Avazart
Форумчанин
 
Аватар для Avazart
 
Регистрация: 13.08.2011
Сообщений: 184
По умолчанию

Прогресс бар и/или окно лога не в моде?
Avazart вне форума Ответить с цитированием
Старый 02.10.2015, 01:08   #6
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Ну смотря что делается. У меня был объёмный поиск, без возможности как-либо предсказать требуемое время...
ResourceSpace вне форума Ответить с цитированием
Старый 02.10.2015, 15:21   #7
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Сообщение от Avazart Посмотреть сообщение
Зачем модальный диалог?
Чтоб основное окно было не активным и пользователь не лез туда своими пальцами. Нужно ждать пока закончится эта тяжелая задача.
SAMOUCHKA вне форума Ответить с цитированием
Старый 02.10.2015, 16:27   #8
Avazart
Форумчанин
 
Аватар для Avazart
 
Регистрация: 13.08.2011
Сообщений: 184
По умолчанию

<<Ну смотря что делается. У меня был объёмный поиск, без возможности как-либо предсказать требуемое время... >>

Ну так лог-окно TextEdit? А у прогресса есть "особый" режим для этого, когда полоса постоянно бегает "особым" образом, не помню как это называется.

<<Чтоб основное окно было не активным и пользователь не лез туда своими пальцами.>>
Почему нет? Зачем блокировать все функции программы, когда можно заблочить только кнопку "старт" и не плодить окна, тем более модальные?

Последний раз редактировалось Avazart; 02.10.2015 в 16:30.
Avazart вне форума Ответить с цитированием
Старый 02.10.2015, 20:45   #9
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
<<Чтоб основное окно было не активным и пользователь не лез туда своими пальцами.>>
Почему нет? Зачем блокировать все функции программы, когда можно заблочить только кнопку "старт" и не плодить окна, тем более модальные?
тут как раз тот случай. пока не закончится этот тяжелый процесс, ни чего делать нельзя! нарушится логика программы, далее будет работать не корректно, если вообще не упадет
SAMOUCHKA вне форума Ответить с цитированием
Старый 02.10.2015, 21:16   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Совсем блочить окно длительным процессом плохо. Оно хотя бы должно иметь возможность прорисовываться
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вроде не тяжелая, но не выходит Дашуля_18 Помощь студентам 2 25.03.2012 16:07
тяжелая, но интересная задача: Дано 3 числа. Между ними можно ставить знаки операций: сложения, вычитания, умножения, деления ВДПУ Помощь студентам 2 25.02.2012 19:59
Правда ли что Java "Тяжелая" и все "вешает" ? webmaster-n Общие вопросы по Java, Java SE, Kotlin 10 30.07.2009 01:22
Тяжелая задачка Sweeney Паскаль, Turbo Pascal, PascalABC.NET 9 16.12.2008 19:25
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50