找回密码
 立即注册
收起左侧

使用QScatterSeries绘制散点图 出现0xC0000005异常

0
回复
8812
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2017-11-20 13:58:48 显示全部楼层 |阅读模式
1Qter豆
如题,我在用QScatterSeries绘制散点图时,想实现点击选中这个点,再次点击取消选中的功能
思路:用了两个series(颜色不同,用来区别选中和未选中的状态)
series1绘制出散点图,点击series1上的点就在series1HandleClickedPoint(const QPointF &point)方法中将点从series1中remove,在series2中append,实现选中的效果
然后在点击series2上的点就在series2HandleClickedPoint(const QPointF &point)方法中将点从series2中remove,在series1中append,实现取消选中的效果
运行时出现异常,疑是出现空指针,但是实在不知道该咋改,求C++大神助力!代码和异常如下:
  1. #include "millionpoints.h"
  2. #include <QtCore/QtMath>

  3. using namespace QtCharts;

  4. MillionPoints::MillionPoints(QWidget *parent)
  5.     : QGraphicsView(parent)
  6. {

  7.     series1 = new QScatterSeries();
  8.     series2 = new QScatterSeries();
  9.     series1->setName("scatter1");
  10.     series2->setName("scatter2");
  11.     series1->setMarkerShape(QScatterSeries::MarkerShapeCircle);
  12.     series1->setMarkerSize(15.0);
  13.     for(double i=0; i<100; i+=5)
  14.     {
  15.          series1->append(i,sin(i));
  16.     }

  17.     chart = new QChart();
  18.     chart->addSeries(series1);
  19.     chart->addSeries(series2);
  20.     chart->createDefaultAxes();
  21.     chart->axisX()->setRange(0,100);
  22.     chart->axisY()->setRange(-10,10);

  23.     scene = new QGraphicsScene();
  24.     scene->addItem(chart);
  25.     scene->setSceneRect(0, 0, 800, 500);
  26.     chart->setGeometry(0,0,800,500);
  27.     this->setWindowTitle("MillionPoints");
  28.     this->resize(900,600);
  29.     this->setScene(scene);

  30.     connect(series1,SIGNAL(clicked(QPointF)),this,SLOT(series1HandleClickedPoint(QPointF)));
  31.     connect(series2,SIGNAL(clicked(QPointF)),this,SLOT(series2HandleClickedPoint(QPointF)));
  32. }

  33. MillionPoints::~MillionPoints()
  34. {

  35. }

  36. void MillionPoints::series1HandleClickedPoint(const QPointF &point)
  37. {
  38.     QPointF clickedPoint = point;
  39.     if(series2->count()==0){
  40.         series1->remove(clickedPoint);
  41.         series2->append(clickedPoint);
  42.         qDebug()<<"--first click";
  43.     }else{
  44.         series1->append(series2->points());
  45.         series2->clear();
  46.         series2->append(clickedPoint);
  47.         series1->remove(clickedPoint);
  48.         qDebug()<<"--click another point";
  49.     }
  50. }
  51. void MillionPoints::series2HandleClickedPoint(const QPointF &point)
  52. {
  53.     QPointF clickedPoint = point;
  54.     series1->append(clickedPoint);
  55.     series2->remove(clickedPoint);
  56.     qDebug()<<"--click last point";
  57. }
复制代码


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了