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


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: Majestio
  
> Создание динамического графика с автонастройкой
    Здравствуйте!
    Мне хотелось бы перевести программу на C# (получение данных с АЦП, демо-программу Adc_demo.zip прикрепил, недостатков в ней много, но работает) на QT. В программе выводятся через заданные промежутки времени показания датчиков, подключенных к АЦП. Сделал тестовый проект на QT. В тестовом проекте на QT график рисуется статично, причем если задать много точек, то программа зависает и переключение на график после нажатия кнопки Старт происходит только после большого промежутка времени. Подскажите, пожалуйста, как сделать так, чтобы в программе на QT также, как и в программе на C#:
    - динамично добавлялись данные на график;
    - была возможность просмотра графиков (возможность переключения на вкладку Графики) сразу после нажатия на кнопку Старт;
    - динамически изменялись максимальные и минимальные значения по оси Y и максимальное значение по оси X.
    Кроме того, хотелось бы также узнать, можно ли указать параметр для Operation в строке
    ExpandedWrap disabled
      connect(btnStart, &QPushButton::clicked, this, &MainWindow::Operation)
    . Для строки
    ExpandedWrap disabled
      connect(btnStart, &QPushButton::clicked, this, &MainWindow::Operation(flagMode::start))
    получаю сообщение, что для левостроннего значению нужно использовать &. Пытался исправить ошибку - не получилось. Тестовый проект на QT qtCharts.zip прикрепил.
    Прикреплённый файлПрикреплённый файлADC_Demo.zip (15,41 Кбайт, скачиваний: 22)
    Прикреплённый файлПрикреплённый файлqtCharts.zip (3,25 Кбайт, скачиваний: 17)
      tumanovalex, у тебя несколько "узкоспециализированные" вопросы. Не уверен, что кто-то захочет погружаться в твои проблемы на достаточном тебе уровне. И, тем не менее, на часть вопросов в некотором "общем смысле" я постараюсь ответить.

      Цитата tumanovalex @
      - динамично добавлялись данные на график;

      Сразу вспоминаем основную фишку взаимодействия компонентов при использовании Qt - это "сигналы/слоты". Это с одной стороны. А вот с другой - вспоминаем что фрэймворк Qt реализует парадигму "MVC". А это значит, что мы должны "разбросать" определённые действия на разные компоненты создаваемой системы. Упрощённый пример:

      1) Компонент1 твоей системы собирает с датчиков параметры и заносит их в твою Модель1
      2) Модель1 по факту своего обновления эмитирует Сингал1
      3) Любые вьюхи (таблицы, графики, просто индикаторы), которые "подписаны" на Сигнал1, по факту получения сигнала - заново выбирают данные из Модели1 и их перерисовывают

      Цитата tumanovalex @
      - была возможность просмотра графиков (возможность переключения на вкладку Графики) сразу после нажатия на кнопку Старт;

      Не понятен вопрос. Но это похоже на "обновить-данные + перерисовать". Также реализуется выбросом сигнала.

      Цитата tumanovalex @
      - динамически изменялись максимальные и минимальные значения по оси Y и максимальное значение по оси X.

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

      Цитата tumanovalex @
      Кроме того, хотелось бы также узнать, можно ли указать параметр для Operation в строке

      Вообще такое делать не рекомендуется. Но если очень хочется, то можно замутить что-то типа "proxy" передачи сигнала. Т.е. на первом шаге мы делаем коннект на &MainWindow::Operation1, а уже в нём мы генерируем сигнал с параметром, и плюс к нему делаем ещё одну связку сигнала с параметром и слота с параметром. Повторюсь - такое я считаю костылём. Надо переосмыслить взаимодействие компонентов еще более внимательно.
        Спасибо за ответ. Но мне кажется, что мой вопрос - не очень узко специализированный. Вопрос в том, как при наличии нескольких вкладок на одной из них выводить график с данными, которые поступают от одной из систем ПК (например, аудио, видео) или внешних датчиков, и при этом иметь возможность переключаться между вкладками. Наверное, для этого нужно использовать потоки. С потоками я еще не работал. Буду разбираться.
          Цитата tumanovalex @
          Наверное, для этого нужно использовать потоки. С потоками я еще не работал. Буду разбираться.

          Ну да, конечно! Обычно в основном потоке (GUI-потоке) тяжёлые и/или ожидающие вычисления не делаются. Тебе нужно запустить поток, который будет получать данные из-вне, а по факту получения эмитировать сигнал. GUI-поток, по факту получения сигнала будет перерисовывать везде всё что нужно.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0254 ]   [ 18 queries used ]   [ Generated: 18.04.25, 12:59 GMT ]