|
1Qter豆
如题,我在用QScatterSeries绘制散点图时,想实现点击选中这个点,再次点击取消选中的功能
思路:用了两个series(颜色不同,用来区别选中和未选中的状态)
series1绘制出散点图,点击series1上的点就在series1HandleClickedPoint(const QPointF &point)方法中将点从series1中remove,在series2中append,实现选中的效果
然后在点击series2上的点就在series2HandleClickedPoint(const QPointF &point)方法中将点从series2中remove,在series1中append,实现取消选中的效果
运行时出现异常,疑是出现空指针,但是实在不知道该咋改,求C++大神助力!代码和异常如下:
- #include "millionpoints.h"
- #include <QtCore/QtMath>
- using namespace QtCharts;
- MillionPoints::MillionPoints(QWidget *parent)
- : QGraphicsView(parent)
- {
- series1 = new QScatterSeries();
- series2 = new QScatterSeries();
- series1->setName("scatter1");
- series2->setName("scatter2");
- series1->setMarkerShape(QScatterSeries::MarkerShapeCircle);
- series1->setMarkerSize(15.0);
- for(double i=0; i<100; i+=5)
- {
- series1->append(i,sin(i));
- }
- chart = new QChart();
- chart->addSeries(series1);
- chart->addSeries(series2);
- chart->createDefaultAxes();
- chart->axisX()->setRange(0,100);
- chart->axisY()->setRange(-10,10);
- scene = new QGraphicsScene();
- scene->addItem(chart);
- scene->setSceneRect(0, 0, 800, 500);
- chart->setGeometry(0,0,800,500);
- this->setWindowTitle("MillionPoints");
- this->resize(900,600);
- this->setScene(scene);
- connect(series1,SIGNAL(clicked(QPointF)),this,SLOT(series1HandleClickedPoint(QPointF)));
- connect(series2,SIGNAL(clicked(QPointF)),this,SLOT(series2HandleClickedPoint(QPointF)));
- }
- MillionPoints::~MillionPoints()
- {
- }
- void MillionPoints::series1HandleClickedPoint(const QPointF &point)
- {
- QPointF clickedPoint = point;
- if(series2->count()==0){
- series1->remove(clickedPoint);
- series2->append(clickedPoint);
- qDebug()<<"--first click";
- }else{
- series1->append(series2->points());
- series2->clear();
- series2->append(clickedPoint);
- series1->remove(clickedPoint);
- qDebug()<<"--click another point";
- }
- }
- void MillionPoints::series2HandleClickedPoint(const QPointF &point)
- {
- QPointF clickedPoint = point;
- series1->append(clickedPoint);
- series2->remove(clickedPoint);
- qDebug()<<"--click last point";
- }
复制代码
|
|