Ich würde QChart
(QGraphicsWidget
in seinem Kern) zu bestimmten Maler, QSvgGenerator
Rendern Rendern.Rendering QChart ohne QGraphicsView
Ich habe https://forum.qt.io/topic/38352/rendering-qgraphicsitem-without-qgraphicsscene/2 folgendes Thema gelesen und implementiert sie in meinem Code:
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);
Es gibt zwei Linien mit Kommentaren: erste ist QChart
direkt für die Malerei, die zweite - Rendering QGraphicsView
.
Ich habe schon versucht, mit setViewBox
zu spielen, die Einstellung auf enorme Werte hilft nicht. Der Effekt ist der gleiche, wenn ich QImage
statt QSvgGenerator
verwende, bekomme ich ein leeres Bild. Die Frage ist warum QChart->paint()
mir leere Malerei gibt?
EDIT: https://bitbucket.org/morodeer/charts_test_2/commits/b1eee99736beb5e43eae2a40ae116ee07e01558f
Danke Mann. Das hat sehr geholfen. – Waldemar