Я хотел бы сделать QChart
(то есть QGraphicsWidget
в своем ядре) конкретному художнику, например QSvgGenerator
.Рендеринг QChart без QGraphicsView
Я прочитал следующую тему https://forum.qt.io/topic/38352/rendering-qgraphicsitem-without-qgraphicsscene/2 и реализовал его в своем коде:
QBuffer b;
QSvgGenerator p;
p.setOutputDevice(&b);
QSize s = app->chart()->size().toSize();
p.setSize(s);
p.setViewBox(QRect(0,0,s.width(),s.height()));
QPainter painter;
painter.begin(&p);
painter.setRenderHint(QPainter::Antialiasing);
app->chart()->paint(&painter, 0, 0); // This gives 0 items in 1 group
m_view->render(&painter); // m_view has app->chart() in it, and this one gives right image
qDebug() << "Copied";
painter.end();
QMimeData * d = new QMimeData();
d->setData("image/svg+xml",b.buffer());
QApplication::clipboard()->setMimeData(d,QClipboard::Clipboard);
Есть две строки с комментариями: первый один является для покраски QChart
непосредственно, второй - оказание QGraphicsView
.
Я уже пытался сыграть с setViewBox
, установив его на огромные значения, это не поможет. Эффект тот же, если я использую QImage
вместо QSvgGenerator
, я получаю пустое изображение.
Итак, вопрос в том, почему QChart->paint()
дает мне пустую картину?
EDIT: рабочий код можно найти на BitBucket: https://bitbucket.org/morodeer/charts_test_2/commits/b1eee99736beb5e43eae2a40ae116ee07e01558f
Спасибо человек. Это очень помогло. – Waldemar