Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. 在子线程中对声明的QChartView使用Grab()截图出错,这是不能这么用吗?
Forum Updated to NodeBB v4.3 + New Features

在子线程中对声明的QChartView使用Grab()截图出错,这是不能这么用吗?

Scheduled Pinned Locked Moved Unsolved Chinese
2 Posts 2 Posters 436 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    buyer
    wrote on last edited by
    #1
    #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");
    }
    
    1 Reply Last reply
    0
    • Y Offline
      Y Offline
      yongong.yu
      wrote on last edited by
      #2

      当然不行,QWidget及其子类只能在主线程中创建运行。

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved