Когда я использую QScatterSeries, я могу очень легко нарисовать точку в (x, y). Однако вместо точек я хотел бы рисовать короткие линии, как на рисунке ниже. Как мне это сделать?
Я пробовал использовать RectangleMarker, но он просто рисует толстый квадрат. Я бы предпочел тонкую линию около 2 пикселей в ширину и 20 пикселей в высоту.
Есть ли способ добавить произвольные формы маркеров?
Вот код и настройки, которые я использую для преобразования моих точек в линии:
//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, из-за чего линии не отображались должным образом.