Реклама

2D Графика в Qt

QT, QGraphicsView, C++

Доброго времени суток, недавно была выпущена статья по созданию и отрисовке графиков в кнопках

https://evileg.com/post/275/

У меня возник вопрос такого плана:

1.И правильно ли я понял как реализуется данная операция отрисовки?
2.как это реализовать в QGraphicsView(QGW)?
3.Как увязывать координаты моей сцены отрисовки с координатами и значениями моих графиков?

Заранее спасибо!



  • #
  • 10 августа 2017 г. 7:43

День добрый!


  1. По этом вопросу ничего Вам не скажу, поскольку Вы не описали своего видения этой проблемы отталкиваясь от статьи, то есть не высказали своего мнения, по которому я мог бы судить, правильно ли Вы понимаете задачу и её решение.
  2. Что касается реализации в QGraphicsView, то придётся рисовать с нуля все линии, все направляюшие, всю сетку. В QGraphicsView система координат работает следующим образом: левый верхний угол сцены обычно имеет координату (0, 0). Если двигаться вправо от этой координаты, то получаем положительные значения по оси X, если двигаться вниз от этой координаты, то полчучаем положительные значения по оси Y. Таким образом необходимо отрисовать все направляющие и коориднатные сетки, учесть возможность изменения размеров области графика при изменении размеров окна и т.д.
  3. Чтобы увязать координаты отрисовки графика со значениями графиков, необходимо отталкивать от координат осей графика. Допустим, это будут линии с определённым координатами на QGraphicsScene, вот от их положения на графике и их репрезентации масштаба значений необходимо пересчитывать реальные значения графика в координаты на QGraphicsView.
Работы по реализации своих графиков в данном случае достаточно много, но это вполне реализуемо. Нужно будет наследдоваться от QGraphicsScene и реализовывать в этом классе свою собственную отрисовку. По объему не скажу, но точно не менее пары тысяч строк кода будет.

Вопрос проще
как передать в QGraphicsView(созданного в Форме(под названием graphicsView)) -> QChartView *view?
ui->graphicsView->???????

Тогда в QGraphicsView нужно установить графическую сцену QGraphicsScene. Это с помощью метода QGraphicsView::setScene() делается. А вот уже графическая сцена имеет метод addWidget(), с помощью которого можно добавлять виджеты (а QChartView является виджетом как раз) можно уже добавлять чарты. Вообще, я этим методом ни разу не пользовался, не было нужды в таком. Но полагаю, что это как раз то что нужно в данном контексте. Так будет создан QGraphicsProxyWidget, вот тут уже не знаю, что дальше делать. Поскольку встаёт вопрос о позиционировании графика на графической сцене.

Возможно есть и более проавильное решение без использования QGraphicsView, но нужно уточнять контекст применения и идеи.
Реклама

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
  • JaJay
  • 17 декабря 2017 г. 5:16

C++ - Тест 002. Константы

  • Результат 58 баллов
  • Очки рейтинга -2
  • JaJay
  • 17 декабря 2017 г. 4:55

C++ - Тест 001. Первая программа и типы данных

  • Результат 93 баллов
  • Очки рейтинга 8
  • JaJay
  • 17 декабря 2017 г. 4:48

C++ - Тест 001. Первая программа и типы данных

  • Результат 66 баллов
  • Очки рейтинга -1
Последние комментарии
  • EVILEG
  • 7 декабря 2017 г. 9:47

Django - Урок 011. Добавление комментариев на сайт с Django

Визуальный пример чего? комментариев? При ответе на конкретный комментарий рядом с ником отвечающего будет стрелочка и указание ник другого пользователя. Который будет ссылкой на коммента...

  • Bernar
  • 7 декабря 2017 г. 9:24

Django - Урок 011. Добавление комментариев на сайт с Django

есть визуальный пример ?

  • EVILEG
  • 6 декабря 2017 г. 11:30

Django - Урок 011. Добавление комментариев на сайт с Django

Да, так будет даже лучше, я на сайте уже обновил до такого вида код Вот это уже не нужно if request.method == 'POST': Поскольку Вы и так используете метод post, то есть эта про...

  • Bernar
  • 6 декабря 2017 г. 11:19

Django - Урок 011. Добавление комментариев на сайт с Django

сделал немного по другому class EArticleView(View): template_name = 'knowledge/article.html' comment_form = CommentForm def get(self, request, *args, **kwargs): ...

Сейчас обсуждают на форуме
  • EVILEG
  • 16 декабря 2017 г. 17:23

Пауза в многопоточности

QFuture, который возвращается QtConcurrent::map имеет методы pause() и resume() и теоретически должен поддерживать этот функционал. Но для Qt...

  • Миша
  • 15 декабря 2017 г. 11:26

Как найти в QVector макс и мин

Спасибо

  • Galant
  • 14 декабря 2017 г. 19:58

LPT

Понял! Спасибо!

  • EVILEG
  • 14 декабря 2017 г. 13:38

QCustomPlot можно ли построить прерывистую линию на одном графике?

Во-первых: В pro файле проект по идее достаточно указать следующий define для включения возможности рендеринга через OpenGL DEFINES += QCUSTOMPLOT_USE_OPENGL И во вторых:...

  • EVILEG
  • 13 декабря 2017 г. 8:05

В многопоточности выполнять действие только в одном из потоков

Статическиe методs QThread::currentThread(); и QThread::currentThreadId() могут возвращать указатель на поток и его handle id соответственно. Можете попробовать через как...