在子线程中对声明的QChartView使用Grab()截图出错,这是不能这么用吗?
Unsolved
Chinese
-
#include "mywork.h" mywork::mywork(QObject *parent) : QObject{parent}, QRunnable() { setAutoDelete(true); } mywork::~mywork() { } void mywork::run() { chartView = new QChartView(); // pixvis = chartView->grab(); chartsatvis = chartView->chart(); aXsatvis = new QValueAxis(); aYsatvis = new QValueAxis(); ss = new QScatterSeries[5]; int eph = 2880; chartsatvis->setContentsMargins(0, 0, 0, 0); chartsatvis->setMargins(QMargins(0, 0, 0, 0)); aXsatvis->setTitleText("历元"); aXsatvis->setRange(0, eph); aXsatvis->setLabelFormat("%d"); aYsatvis->setTitleText("卫星"); aYsatvis->setRange(0, 4); aYsatvis->setLabelFormat("%d"); // QPixmap pixvis = chartView->grab(); chartsatvis->addAxis(aXsatvis, Qt::AlignBottom); chartsatvis->addAxis(aYsatvis, Qt::AlignLeft); // QChart* af = chartView->chart(); QPixmap pixvis = chartView->grab(); chartView->setChart(chartsatvis); pixvis = chartView->grab(); for (int i=0; i<5; i++) { for (int j=0; j<2880; j++){ ss[i].append(j, i); } int r=fmod(rand(), 255); int g=fmod(rand(), 255); int b=fmod(rand(), 255); QVector<QPointF> sd = ss[i].pointsVector(); // ss[i].setColor(QColor(r, g, b)); // ss[i].setUseOpenGL(true); ss[i].setMarkerShape(QScatterSeries::MarkerShapeCircle); ss[i].setBorderColor(QColor(r, g, b)); ss[i].setBrush(QBrush(QColor(r, g, b))); ss[i].setMarkerSize(2); chartsatvis->addSeries(&ss[i]); ss[i].attachAxis(aXsatvis); ss[i].attachAxis(aYsatvis); } pixvis = chartView->grab(); pixvis.save("fileName.png"); }
-
当然不行,QWidget及其子类只能在主线程中创建运行。