На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: Majestio
  
> Обновление текста метки
    Здравствуйте!
    Метод:
    ExpandedWrap disabled
      void MainWindow::Start()
      {
        lblInfo->clear();
        lblInfo->setText("");
        QThread::sleep(10);
        QString fileNameSave = lblFileNameResults->text();
        if(fileNameSave.isEmpty())
        {
          GetFileName(true);
        }
        fileNameSave = lblFileNameResults->text();
        lblInfo->setText("Программа завершилась!");
      }
    Установленный после первого нажатия кнопки Старт текст в метке при следующих нажатиях этой кнопки не обновляется. Помогите, пожалуйста. Проект прикрепил.
    Прикреплённый файлПрикреплённый файлqtGuiTest.zip (4,51 Кбайт, скачиваний: 6)
      Все дело в QThread::sleep(10); Это конструкция не только усыпляет поток, но и приостанавливает обработку событий в главном потоке (читай "GUI потоке"), в том числе и обработку событий отрисовки. Лучше использовать обработки в других потоках и связывать эти потоки сигналами. Но если уж хочется сделать в основном потоке - можно использовать неблокирующий события вариант задержки:

      ExpandedWrap disabled
        QEventLoop Loop;
        QTimer Timer;
        connect(&Timer, &QTimer::timeout, &Loop, &QEventLoop::quit);
        Timer.setSingleShot(true);
        Timer.start(1000);
        Loop.exec();

      Варианты задержек.
        Цитата Majestio @
        Все дело в QThread::sleep(10)
        По-моему, дело не в этом. Я убрал задержку:
        ExpandedWrap disabled
          void MainWindow::Start()
          {
            lblInfo->clear();
            lblInfo->setText("");
            QString fileNameSave = lblFileNameResults->text();
            if(fileNameSave.isEmpty())
            {
              GetFileName(true);
            }
            fileNameSave = lblFileNameResults->text();
            lblInfo->setText("Программа завершилась!");
          }
        текст все равно не обновляется. Задержку я вводил только потому, чтобы увидеть, как становится пустым текст в метке.

        Добавлено
        Я тормоз. Все обновляется, задержка не нужна.
        Сообщение отредактировано: tumanovalex -
          Повторюсь - можно и с задержкой, но только по моему варианту. Ну а так, конечно, если задержка не нужна для чего-то другого, то лучше без нее.
            Спасибо, понятно.
              Цитата tumanovalex @
              Спасибо, понятно.

              И на будущее - лови лайфхак ...

              Твои программы могут как угодно быстро рассчитывать и обсчитывать твои данные. Но это совсем не значит, что на каждое изменение ты должен перерисовывать значение соответствующего "контрола". Нет, конечно можешь - но будешь просто "сжигать" впустую нагрузку на CPU. Для человеческого восприятия наличия изменений - вполне достаточно не более 4 раз в секунду изменять визуально значение какой-то величины в интерфейсе. И это нужно делать, вернее ограничивать, в обрабатывающем потоке. Т.е. там нужно что-то обрабатывать и слать сигнал основному потоку только тогда, когда предыдущий сигнал был отослан 0.25 сек или более тому назад.

              Тогда, и только тогда, твоя прога будет работать по фэн-шую. И с такой прогой можно будет даже спокойно ехать в КНДР, с полной уверенностью, что тебя там за нее не расстреляют! 8-)
                Цитата Majestio @
                Для человеческого восприятия наличия изменений - вполне достаточно не более 4 раз в секунду изменять визуально значение какой-то величины в интерфейсе.
                Спасибо, в будущем обязательно буду это учитывать.
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0251 ]   [ 17 queries used ]   [ Generated: 15.06.25, 10:25 GMT ]