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

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

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

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

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...

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

enter image description here

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

m_pSeries0->setUseOpenGL(true);

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

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

Флориан

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

Marcus 24.04.2018 15:22

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

oro777 15.12.2020 06:27

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