
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
![]() |
|
|
Здравствуйте!
Метод: ![]() ![]() void MainWindow::Start() { lblInfo->clear(); lblInfo->setText(""); QThread::sleep(10); QString fileNameSave = lblFileNameResults->text(); if(fileNameSave.isEmpty()) { GetFileName(true); } fileNameSave = lblFileNameResults->text(); lblInfo->setText("Программа завершилась!"); } Прикреплённый файл ![]() |
Сообщ.
#2
,
|
|
|
Все дело в QThread::sleep(10); Это конструкция не только усыпляет поток, но и приостанавливает обработку событий в главном потоке (читай "GUI потоке"), в том числе и обработку событий отрисовки. Лучше использовать обработки в других потоках и связывать эти потоки сигналами. Но если уж хочется сделать в основном потоке - можно использовать неблокирующий события вариант задержки:
![]() ![]() QEventLoop Loop; QTimer Timer; connect(&Timer, &QTimer::timeout, &Loop, &QEventLoop::quit); Timer.setSingleShot(true); Timer.start(1000); Loop.exec(); Варианты задержек. |
Сообщ.
#3
,
|
|
|
Цитата Majestio @ По-моему, дело не в этом. Я убрал задержку:Все дело в QThread::sleep(10) ![]() ![]() void MainWindow::Start() { lblInfo->clear(); lblInfo->setText(""); QString fileNameSave = lblFileNameResults->text(); if(fileNameSave.isEmpty()) { GetFileName(true); } fileNameSave = lblFileNameResults->text(); lblInfo->setText("Программа завершилась!"); } Добавлено Я тормоз. Все обновляется, задержка не нужна. |
Сообщ.
#4
,
|
|
|
Повторюсь - можно и с задержкой, но только по моему варианту. Ну а так, конечно, если задержка не нужна для чего-то другого, то лучше без нее.
|
Сообщ.
#5
,
|
|
|
Спасибо, понятно.
|
Сообщ.
#6
,
|
|
|
Цитата tumanovalex @ Спасибо, понятно. И на будущее - лови лайфхак ... Твои программы могут как угодно быстро рассчитывать и обсчитывать твои данные. Но это совсем не значит, что на каждое изменение ты должен перерисовывать значение соответствующего "контрола". Нет, конечно можешь - но будешь просто "сжигать" впустую нагрузку на CPU. Для человеческого восприятия наличия изменений - вполне достаточно не более 4 раз в секунду изменять визуально значение какой-то величины в интерфейсе. И это нужно делать, вернее ограничивать, в обрабатывающем потоке. Т.е. там нужно что-то обрабатывать и слать сигнал основному потоку только тогда, когда предыдущий сигнал был отослан 0.25 сек или более тому назад. Тогда, и только тогда, твоя прога будет работать по фэн-шую. И с такой прогой можно будет даже спокойно ехать в КНДР, с полной уверенностью, что тебя там за нее не расстреляют! ![]() |
Сообщ.
#7
,
|
|
|
Цитата Majestio @ Спасибо, в будущем обязательно буду это учитывать. Для человеческого восприятия наличия изменений - вполне достаточно не более 4 раз в секунду изменять визуально значение какой-то величины в интерфейсе. |