Qt как установить картинку под график qchart

от admin

Русские Блоги

Qt5 использует qcharts для рисования диаграмм, обмена Mat и QImage, использования меток для отображения изображений и т. Д.

1. Как понять вещь, которая может отображать и устанавливать картинки с меткой?

2. Идея настройки прокручиваемых картинок? Нужно использовать этот класс?

3. Идея преобразования типов Mat и QImage друг в друга, в основном использовать Mat для QImage?

4. Как получить указатель изображения типа Mat?

Используйте метку метки и область прокрутки scrollArea для отображения изображений типа циновки

Несколько связанных с иконками переменных-членов:

Сначала перетащите макет горизонтальный макет в интерфейсе дизайна, перетащите элемент scrollArea в макет, а затем поместите на него метку метки. Макет выглядит следующим образом:

Некоторые коды следующие, и комментарии уже очень подробны:

1. Определите тип изображения

2. Установите уровень серого на изображении и инициализируйте изображение QImage.

Qt как установить картинку под график qchart

Does somebody know how to make QChart look like on the image below?

I have created bar QBarChart and set its background color and color of the bar and removed axis numbers, but I don’t know how to set title of the chart to look like this.

How to make the background of the title to have different color and to take same width as the QChart?

enter image description here

ΦXocę 웃 Пepeúpa ツ's user avatar

1 Answer 1

I did as Spinkoo suggested.

Created QLabel in MainWindow constructor and created function which is used to position QLabel over QChart. That function must be called after the constructor of the MainWindow, because then all of the sizes and positions of the widgets and layouts are known. That function is called after the constructor of the MainWindow and each time when Resize event happens.

This is pretty much a workaround solution, probably there should be a way to create custom QChart class which will have the look as the chart from the question. So, if someone knows how to do that, I’d appreciate sharing.

Qt как установить картинку под график qchart

Статья «нулевого уровня», но пару примеров кода содержит ��

1. Общие принципы
  • QPainter – «рисовальщик» QT, класс-исполнитель команд рисования;
  • QPaintEngine – «движок» рисования, обычно не используемый из кода непосредственно. Он бывает нужен программисту лишь при создании собственных контекстов рисования, отсутствующих в системе;
  • QPaintDevice – контекст рисования (канва), который можно понимать как графическое «полотно», состоящее из пикселов.

В обычных случаях программе достаточно «захватить» адрес объекта контекста, отрисовать нужные графические примитивы и освободить контекст:

Здесь рисуется заштрихованный прямоугольник на канве текущего виджета. Существенно, что этот код должен выполняться из метода paintEvent, который может быть переопределён в любом пользовательском виджете, являющемся наследником имеющего канву класса (см.п.2).

  • Перо QPen – для рисования контуров;
  • Кисть QBrush – для заполнения контуров цветом.

Непосредственно отрисовкой занимаются методы класса QPainter с названиями на draw (drawLine, drawRect, drawPolygon, drawEllipse) или fill (fillRect, fillPath). Кроме настроек пера и кисти, этим методам часто требуется информация о координатах точек, размерах прямоугольников, текущих цветах и т.п. Для хранения всей этой информации в QT предусмотрен ряд геометрических классов, которые ничего не рисуют, но хранят описания размеров или расположений графических объектов. Большинство геометрических классов реализованы «дважды», например, класс QPoint работает с целочисленными координатами точек на плоскости, а QPointF – с вещественными:

Целочисленные и вещественные координаты точки на плоскости

. x (), . y () – получение координат;

. setX (), . setY () – установка координат.

В классах определены сравнения, арифметические действия над координатами

Размер, то есть, совокупность ширины и высоты

. width (), . height () – получить размеры;

. setWidth (), . setHeight () – установить размеры;

. scale () – масштабировать размер.

Прямоугольник, фактически, это " точка+размер "

См. QPoint , QSize

Отрезки на плоскости

. x 1(), . y 1(), . x 2(), . y 2() – координаты начала и конца отрезка;

. dx (), . dy () – проекции на оси 0 X и 0 Y

Многоугольник на плоскости, фактически, массив точек (координат вершин)

<< добавить точку QPoint

. point ( i ) – вернуть i — ую точку

Цвет в модели RGB (или HSV )

. setRgb ( r,g,b ) установить интенсивности цветов;

. red (), . green , . blue (), . alpha () – получить интенсивности цветов и прозрачность

  • translate – сдвинуть начало координат в указанную точку;
  • scale – масштабировать систему координат;
  • rotate – повернуть систему координат;
  • shear – исказить систему координат (выполнить скос);
  • save, restore – сохранить/восстановить состояние рисовальщика.

В большинстве случаев при отрисовке объектов удобнее пользоваться этими методами, чем высчитывать всё в «абсолютных координатах» канвы. Например, мы не меняли геометрию треугольника, определённого в функции drawTriangle и не высчитывали при каждой отрисовке новых координат его вершин:

2. Работа с графической канвой

Создадим проект на основе класса QWidget (добавились файлы main.cpp, widget.h, widget.cpp). Так как отрисовка выполняется по событию paintEvent, в заголовочном файле widget.h нам понадобится добавить прототип виртуального метода paintEvent, предусмотренного в каждом виджете. Чтобы виджет мог рисовать на канве, он должен переопределить этот метод:

В файле widget.cpp нам остается написать реализацию метода. Покажем простейшие действия с кистью, пером и строкой текста:

Теперь класс Widget может рисовать на своей канве. Так как событие paintEvent происходит, в том числе, при изменении размеров окна виджета, картинка всё время будет соответствовать окну формы.

3. Работа с изображениями
  • Format_Invalid — формат неверен;
  • Format_Mono – монохромное изображение с 1 битом на пиксел;
  • Format_Index8 – данные представляют собой 8-битные индексы цветовой палитры;
  • Format_RGB32 – каждый пиксел представлен 32 битами (интенсивности красного, зелёного и синего, плюс значение альфа-канала, всегда равное 0xFF, то есть, прозрачность не поддерживается);
  • Format_ARGB32 – 32 бита на пиксел с поддержкой альфа-канала прозрачности.

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

Загрузить изображение можно, передав конструктору путь к нужному файлу:

или воспользовавшись методом load:

Как видно из кода, отобразить изображение можно методом drawImage класса QPainter. Показать часть изображения можно с помощью дополнительных параметров метода.

Папка, которая является текущей, в общем случае зависит от проекта. Обычно это та папка, где находится файл Makefile проекта.

Сохранить изображение может метод save:

Сохранение произойдёт в ту папку, которая является текущей в вашей конфигурации проекта.

Для чтения отдельных пикселов удобен метод pixel:

Записать пикселы можно с помощью метода setPixel:

Показанный код рисует линейный градиент в окне формы, для работы нужны директивы

  • invertPixels – позволяет инвертировать цвета пикселов и/или альфа-канал;
  • scaled – позволяет масштабировать изображение;
  • mirrored – выполняет зеркальное отражение картинки по горизонтали и/или вертикали.

Класс контекстно-зависимого представления изображений QPixmap также унаследован от QPaintDevice. Его использование целесообразно там, где нужен промежуточный буфер для рисования или критична скорость отрисовки графических объектов. Существует также отдельный класс-потомок QBitmap для работы с монохромными изображениями.

4. Построение графиков и диаграмм

Хорошее введение в тему даёт эта статья.

5. «Продвинутый» пример рисования мышью в QT

По всем правилам создаём графическую сцену, таймер и пример простейшей «рисовалки» нажатой левой кнопкой мыши.

Qt/C++ — Урок 071. Динамическое создание графиков с QtCharts.

Разберём вариант создания графиков, когда необходимо добавлять большое количество графиков, которые создаются динамически. Подобный урок уже был в статье по динамическому созданию виджетов, только там добавлялись кнопки QPushButton . Здесь применяется тот же самый вариант работы. Выделяется память в куче, производится настройка виджета с графиком, и виджет добавляет в QScrollArea или QLayout, чтобы отобразить сам график в окне приложения.

Приложение будет выглядеть следующим образом:

В данном примере будет добавляться 5 графиков в горизонтальный Layout ( QHBoxLayout ). Также в примере будет добавлена всплывающая подсказка, которая содержит некоторую информацию. Например, номер графика и количество отсчётов.

Структура проекта

  • Graphs.pro — профайл проекта;
  • widget.h — заголовочный файл окна приложения;
  • widget.cpp — файл исходных кодов окна приложения;
  • widget.ui — форма окна приложения;
  • main.cpp — файл с main функцией.
Читать:
Как решать пределы стремящиеся к бесконечности

main.cpp создаётся по умолчанию и не изменяется в проекте. В файле widget.ui необходимо только создать размещение QHBoxLayout . Сделать это можно через графический дизайнер Qt.

В профайле проекта необходимо подключить модуль charts (он должен быть предварительно установлен, в виде предкомпилированных библиотек QtCharts доступен с версии Qt5.7).

Краткое описание

Появление Qt Charts ознаменовало конец QWT, QCustomPlot . Пора попрощаться с ними. Qt Charts — мощный и привлекательный, с этого момента позвольте нам окунуться в светлое будущее.

Конфигурация установки

Модуль Qt Charts интегрирован в Qt5.7. Для установки и настройки Qt, пожалуйста, обратитесь к:

В процессе установки некоторые вновь добавленные модули (например, Qt Charts) не устанавливаются по умолчанию, и вы можете отметить их при необходимости:

нота: Поскольку Qt Charts будут использоваться позже, пожалуйста, проверьте этот модуль, иначе он не может быть использован.

Основной пример

Qt предоставляет серию примеров для Qt Charts, что является одним из способов быстрого изучения и освоения Qt Charts.

Откройте Creator, выберите: [Добро пожаловать] -> [Пример] и введите ключевые слова, относящиеся к «диаграммам»:

Выберите один из примеров для запуска, эффект будет следующим:

Эффект отличный, красивый, простой, интуитивно понятный, а также поддерживает анимацию. , ,

Начиная

Если вы хотите импортировать Qt Charts тип QML, вам нужно добавить следующую инструкцию импорта в файл .qml:

Чтобы использовать класс C ++ Qt Charts в приложении, используйте следующие операторы include и using:

  • 1
  • 2
  • 3

Вот более простое определение макроса, заменяющее использование пространств имен:

Найдя определение, вы увидите, что правда есть:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

нота: Начиная с Qt Creator 3.0, проекты, созданные с помощью мастера Qt Quick Application, основаны на шаблоне Qt Quick 2 и по умолчанию используют QGuiApplication. Все такие экземпляры QGuiApplication в проекте должны быть заменены на QApplication, и модуль зависит от визуализации каркаса графического представления.

Для ссылки на модуль Qt Charts вам нужно добавить в файл проекта qmake:

Основное использование

Чтобы построить диаграмму, есть два способа:

QChartView + QChart
В качестве независимого окна диаграммы QChartView используется для отображения QChart, и его не нужно использовать с QGraphicsScene.

QGraphicsScene + QChart
Отобразите QChart (или QPolarChart) в существующей QGraphicsScene.

QChartView + QChart

Таким образом, QChartView используется как независимое окно, а QChart можно установить как отображаемую диаграмму с помощью конструктора или вызова setChart (), что очень просто для независимого отображения диаграммы.

QGraphicsScene + QChart

В этом методе не требуется использовать QChartView, окно диаграммы заменяется QGraphicsView, а QChart (или QPolarChart) отображается в QGraphicsScene.

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

Qt как установить картинку под график qchart

I’m using QChart and QChartView to produce my 2D line graphs.

Now, I would like to create a 2D line chart that will contain a background image, like this example below:
image.png

How can I do it using Qt? Is this possible?

@mrjj thank you a lot!

The original source-code of this old post was not working and it have a lot of warnings.
So I modified to get a complete and zero errors/warnings modern Qt example.
Here is the full source-code:

3 key points:

  • In the UI file, you have to add a gridLayout to the MainWindow window.
  • Add the charts in your *.pro file Qt += charts
  • The background image must be in a Qt resource file

The final result is this chart + a backgroud image:
16d3190a-46ad-4037-993f-788da6eb1a97-image.png

I saw this Qt3DSurface that enable to put a texture in the plot area (link here).
I don’t know if it can be used in this case.

69951d11-f305-4c81-872c-c62b2b52db37-image.png

Anyone can confirm it?
I don’t know is is possible to generate a Qt3DSurface , rotate it to get a 2D plan (X and Y axis only) and:

  • Plot a time series (like a QChart )
  • Add a background «texture» with the desired image (like the first post above).

Is this possible?

Hi
Have a look here
https://forum.qt.io/topic/82640/center-background-image-in-qchart
(last post)
They used a brush to get a background picture. and transformed it to only be in the plot area.
Disclaimer. I have not tried it 🙂

@mrjj thank you a lot!

The original source-code of this old post was not working and it have a lot of warnings.
So I modified to get a complete and zero errors/warnings modern Qt example.
Here is the full source-code:

3 key points:

  • In the UI file, you have to add a gridLayout to the MainWindow window.
  • Add the charts in your *.pro file Qt += charts
  • The background image must be in a Qt resource file

The final result is this chart + a backgroud image:
16d3190a-46ad-4037-993f-788da6eb1a97-image.png

Qt QChart title background

Does somebody know how to make QChart look like on the image below?

I have created bar QBarChart and set its background color and color of the bar and removed axis numbers, but I don’t know how to set title of the chart to look like this.

How to make the background of the title to have different color and to take same width as the QChart?

enter image description here

user avatar

1 Answer 1

I did as Spinkoo suggested.

Created QLabel in MainWindow constructor and created function which is used to position QLabel over QChart. That function must be called after the constructor of the MainWindow, because then all of the sizes and positions of the widgets and layouts are known. That function is called after the constructor of the MainWindow and each time when Resize event happens.

This is pretty much a workaround solution, probably there should be a way to create custom QChart class which will have the look as the chart from the question. So, if someone knows how to do that, I’d appreciate sharing.

Решенные QChart + background image

I’m using QChart and QChartView to produce my 2D line graphs.

Now, I would like to create a 2D line chart that will contain a background image, like this example below:
image.png

How can I do it using Qt? Is this possible?

@mrjj thank you a lot!

The original source-code of this old post was not working and it have a lot of warnings.
So I modified to get a complete and zero errors/warnings modern Qt example.
Here is the full source-code:

3 key points:

  • In the UI file, you have to add a gridLayout to the MainWindow window.
  • Add the charts in your *.pro file Qt += charts
  • The background image must be in a Qt resource file

The final result is this chart + a backgroud image:
16d3190a-46ad-4037-993f-788da6eb1a97-image.png

I saw this Qt3DSurface that enable to put a texture in the plot area (link here).
I don’t know if it can be used in this case.

69951d11-f305-4c81-872c-c62b2b52db37-image.png

Anyone can confirm it?
I don’t know is is possible to generate a Qt3DSurface , rotate it to get a 2D plan (X and Y axis only) and:

  • Plot a time series (like a QChart )
  • Add a background «texture» with the desired image (like the first post above).

Is this possible?

Hi
Have a look here
https://forum.qt.io/topic/82640/center-background-image-in-qchart
(last post)
They used a brush to get a background picture. and transformed it to only be in the plot area.
Disclaimer. I have not tried it 🙂

@mrjj thank you a lot!

The original source-code of this old post was not working and it have a lot of warnings.
So I modified to get a complete and zero errors/warnings modern Qt example.
Here is the full source-code:

3 key points:

  • In the UI file, you have to add a gridLayout to the MainWindow window.
  • Add the charts in your *.pro file Qt += charts
  • The background image must be in a Qt resource file

The final result is this chart + a backgroud image:
16d3190a-46ad-4037-993f-788da6eb1a97-image.png

Похожие статьи