Russian Qt Forum
Ноябрь 27, 2024, 01:21
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
[Решено]Чтобы не застывал интерфейс
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [Решено]Чтобы не застывал интерфейс (Прочитано 5626 раз)
merke
Гость
[Решено]Чтобы не застывал интерфейс
«
:
Август 07, 2010, 15:28 »
Всем привет!
Подскажите функцию в кутях, которая не позволяет зависать главному потоку т.е. GUI во время выполнения долгих вычислений. А то приложение замирает всё на секунд 10 во время выполнения тяжелых вычислений.
Буду рад помощи!
С уважением, Александр
«
Последнее редактирование: Август 07, 2010, 16:45 от merke
»
Записан
f0x
Гость
Re: Чтобы не застывал интерфейс
«
Ответ #1 :
Август 07, 2010, 16:15 »
читай про многопоточность в книжках или Qt assistant
Записан
merke
Гость
Re: Чтобы не застывал интерфейс
«
Ответ #2 :
Август 07, 2010, 16:26 »
многопоточность тут ни при чем. Я знал эту функцию, но она вылетила напрочь из головы!
Записан
AleUri
Гость
Re: Чтобы не застывал интерфейс
«
Ответ #3 :
Август 07, 2010, 16:35 »
qApp->processEvents();
Записан
kowsan
Гость
Re: Чтобы не застывал интерфейс
«
Ответ #4 :
Август 07, 2010, 16:35 »
QCoreApplication::processEvents
Записан
merke
Гость
Re: Чтобы не застывал интерфейс
«
Ответ #5 :
Август 07, 2010, 16:45 »
Супер. Спасибо! то что нужно!!!
Записан
Etud
Гость
Re: [Решено]Чтобы не застывал интерфейс
«
Ответ #6 :
Август 07, 2010, 18:54 »
и что ?!!
эта функция спасает от массы операций GUI ?
Записан
f0x
Гость
Re: [Решено]Чтобы не застывал интерфейс
«
Ответ #7 :
Август 07, 2010, 19:46 »
нет. использовать этот метод для обработки длительных вычислений - далеко не лучший способ
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: [Решено]Чтобы не застывал интерфейс
«
Ответ #8 :
Август 07, 2010, 19:49 »
Цитата: alFoX от Август 07, 2010, 19:46
нет. использовать этот метод для обработки длительных вычислений - далеко не лучший способ
Ну тогда уж интересно узнать какой же лучший
Записан
zenden
Гость
Re: [Решено]Чтобы не застывал интерфейс
«
Ответ #9 :
Август 07, 2010, 22:29 »
Отдельный поток, естессно!
А как иначе, если разбить задачу на маленькие кусочки невозможно?
А вы уверены, что участок кода, выполняющийся при одних условиях 0.01 с, не будет выполняться при других условиях 10 с?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: [Решено]Чтобы не застывал интерфейс
«
Ответ #10 :
Август 08, 2010, 10:05 »
Цитата: zenden от Август 07, 2010, 22:29
Отдельный поток, естессно!
Чем же оно так естественно? Только тем что такая рекомендация есть в букваре?
А если посмотреть непредвзято: нужно как-то обновлять индикатор в главной нитке, уметь остановить нитку, поймать завершение и.т.д. И потом: если UI "разрешено" - в нем придется предусмотреть все ситуации когда запущенная нитка потеряла всякий смысл. Поэтому во многих случаях (если не в большинстве) проще и лучше действовать через модальный QProgressDialog (который позовет тот же processEvents)
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: [Решено]Чтобы не застывал интерфейс
«
Ответ #11 :
Август 08, 2010, 22:31 »
Цитата: Igors от Август 08, 2010, 10:05
придется предусмотреть все ситуации когда запущенная нитка потеряла всякий смысл. Поэтому во многих случаях (если не в большинстве) проще и лучше действовать через модальный QProgressDialog (который позовет тот же processEvents)
Проще - да. Но лучше ли?
Записан
ufna
Гость
Re: [Решено]Чтобы не застывал интерфейс
«
Ответ #12 :
Август 09, 2010, 11:06 »
смотря какая задача. Очень часто - лучше. На то эти диалоги и придуманы, как мне кажется.
к примеру, "open fsaved file" в проге - в зависимости от специфики - может занять разное время, и в основной поток грузится много данных. Зачем второй и т.п., если во время открытия пользователю кликать совершенно ничего не надо?
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: [Решено]Чтобы не застывал интерфейс
«
Ответ #13 :
Август 09, 2010, 21:46 »
Цитата: ufna от Август 09, 2010, 11:06
Зачем второй и т.п., если во время открытия пользователю кликать совершенно ничего не надо?
Хотя-бы для того, чтобы иметь возможность передвинуть основное окно приложения пока идет обработка. С моей точки зрения использование модальных диалогов для вывода информации - вообще зло. Но это уже совсем другая история.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...