Qt5 QtChart отбрасывает вертикальные линии при использовании QScatterSeries

Когда я использую QScatterSeries, я могу очень легко нарисовать точку в (x, y). Однако вместо точек я хотел бы рисовать короткие линии, как на рисунке ниже. Qt5 QtChart отбрасывает вертикальные линии при использовании QScatterSeries Как мне это сделать?

Я пробовал использовать RectangleMarker, но он просто рисует толстый квадрат. Я бы предпочел тонкую линию около 2 пикселей в ширину и 20 пикселей в высоту.

Есть ли способ добавить произвольные формы маркеров?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 266
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот код и настройки, которые я использую для преобразования моих точек в линии:

//create scatter series to draw point
m_pSeries1 = new QtCharts::QScatterSeries();
m_pSeries1->setName("trig");
m_pSeries1->setMarkerSize(100.0);

//draw a thin rectangle (50 to 50)
QPainterPath linePath;
linePath.moveTo(50, 0);
linePath.lineTo(50, 100);
linePath.closeSubpath();

//adapt the size of the image with the size of your rectangle
QImage line1(100, 100, QImage::Format_ARGB32); 
line1.fill(Qt::transparent);
QPainter painter1(&line1);
painter1.setRenderHint(QPainter::Antialiasing);
painter1.setPen(QColor(0, 0, 0));
painter1.setBrush(painter1.pen().color());
painter1.drawPath(linePath);

//attach your image of rectangle to your series
m_pSeries1->setBrush(line1);
m_pSeries1->setPen(QColor(Qt::transparent));

//then use the classic QtChart pipeline...

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

На картинке это черная линия. Как видите, вы можете повторить процесс для других серий. Имейте в виду, что вы не могу используете ускорение openGL:

m_pSeries0->setUseOpenGL(true);

Моя работа основана на примере QtCharts / QScatterSeries: Пример QScatterSeries

Надеюсь, это поможет тебе.

Флориан

Великолепно ...! Это именно то, что я искал. Благодаря тонну. Я пробовал этот метод, но не смог использовать изображение с размером, равным markerSize, из-за чего линии не отображались должным образом.

Marcus 24.04.2018 15:22

Хорошо, но другого пути нет? Я имею в виду, что вертикальная линия должна быть основным элементом построения графика.

oro777 15.12.2020 06:27

Другие вопросы по теме