QtCharts 使用信号连接实现柱状图series点击事件

QtCharts 使用信号连接实现柱状图series点击事件

DRLneo

看了很久的demo文件,照着里面可以写但是没能完全理解里面的信号连接:

QObject::connect(seasonSeries, &DrilldownBarSeries::clicked, drilldownChart, &DrilldownChart::handleClicked);

卡了很久,发现QBarSeries是继承于QAbstractBarSeries

于是试着写了按照标准信号连接,结果发现可以实现............

实现代码:

  1. .cpp

  2.  
  3. //建立图标

  4.     QBarSet *barset1 = new QBarSet("OK");

  5.     //QBarSet *barset2 = new QBarSet("NOK");

  6.     //输入图标数据

  7.     *barset1 << 0 << 100 << 66.7 << 33.3;

  8.     //建立条状图

  9.     QBarSeries *series = new QBarSeries;

  10.     //加入数据

  11.     series->append(barset1);

  12.     //建立图标

  13.     QChart *chart = new QChart;

  14.     //图表加入条状图

  15.     chart->addSeries(series);

  16.     //设置表头

  17.     chart->setTitle("Signals");

  18.     //设置动画选项

  19.     chart->setAnimationOptions(QChart::SeriesAnimations);

  20.     //创建一个QStringList 作为x轴标签

  21.     QStringList categories;

  22.     categories << "Laser" << "Temp" << "Plasma" << "Ref";

  23.     //设置分类轴

  24.     QBarCategoryAxis *axis = new QBarCategoryAxis();

  25.     axis->append(categories);

  26.     //创建默认轴

  27.     chart->createDefaultAxes();

  28.     //设置轴X

  29.     chart->setAxisX(axis, series);

  30.     //设置图标

  31.     chart->legend()->setVisible(true);

  32.     chart->legend()->setAlignment(Qt::AlignBottom);

  33.     //隐藏图标

  34.     chart->legend()->hide();

  35.  
  36.     //series->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);

  37.  
  38.     //建立图表视图

  39.     QChartView *chartView = new QChartView(ui.chartlabel2);

  40.     chartView->setChart(chart);

  41.     //抗锯齿

  42.     chartView->setRenderHint(QPainter::Antialiasing);

  43.     chartView->resize(300, 150);

  44.     chartView->show();

  45.  
  46. //信号和槽的连接

  47. connect(series, SIGNAL(clicked(int, QBarSet*)), this, SLOT(chartslot1()));

 
  1. void MainWindow::chartslot1()

  2. {

  3. QBarSet *barset1 = new QBarSet("OK");

  4. *barset1 << qrand() % 5 * 20 << qrand() % 5 * 20;

  5. QBarSeries *series = new QBarSeries;

  6. series->append(barset1);

  7.  
  8. QChart *chart = new QChart;

  9. chart->addSeries(series);

  10. chart->setTitle("Overview");

  11. chart->setAnimationOptions(QChart::NoAnimation);

  12.  
  13. QStringList categories;

  14. categories << "OK" << "NOK";

  15.  
  16. QBarCategoryAxis *axis = new QBarCategoryAxis();

  17. axis->append(categories);

  18.  
  19. chart->createDefaultAxes();

  20. chart->setAxisX(axis, series);

  21. chart->axisX()->setRange(10, 50);

  22. chart->legend()->setVisible(true);

  23. chart->legend()->setAlignment(Qt::AlignBottom);

  24. chart->legend()->hide();

  25. //series->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);

  26.  
  27. //建立图表视图

  28. //将图表显示在ui.chartlabel1上

  29. QChartView *chartView = new QChartView(ui.chartlabel1);

  30. chartView->setChart(chart);

  31. //抗锯齿

  32. chartView->setRenderHint(QPainter::Antialiasing);

  33.  
  34. //实现鼠标左键选择放大,右键选择缩小

  35. //chartView->setRubberBand(QChartView::RectangleRubberBand);

  36. chartView->resize(300, 150);

  37. chartView->show();

  38.  
  39. // 设置数据系列标签的位置于数据柱内侧上方

  40. series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);

  41. // 设置显示数据系列标签

  42. series->setLabelsVisible(true);

  43. }

 

代码注释已经很详细了.

最近在学qtcharts发现自己qt和c++基础不扎实.连demo都看不来.或者说看懂了自己没办法熟练使用.还是得练啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值