当前位置:嗨网首页>书籍在线阅读

25-实时显示光标处的数值

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.4.4 实时显示光标处的数值

主窗口类MainWindow的构造函数实现如下:

MainWindow::MainWindow(QWidget *parent) :  QMainWindow(parent), 
 ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   this->setCentralWidget(ui->chartView);
   labXYValue = new QLabel("X=,  Y=  "); //状态栏显示鼠标点的坐标
   labXYValue->setMinimumWidth(200);
   ui->statusBar->addWidget(labXYValue);
   createChart();//创建图表
   prepareData();//生成数据
   QObject::connect(ui->chartView,SIGNAL(mouseMovePoint(QPoint)),
              this, SLOT(on_mouseMovePoint(QPoint)));  //鼠标移动事件
}

构造函数调用createChart()创建图表,调用prepareData()为图表添加数据。最后,将窗口上的chartView组件的mouseMovePoint(QPoint)信号与自定义槽函数on_mouseMovePoint(QPoint)关联起来,用于实现鼠标在图表上移动时在状态栏里显示光标处的数值。

createChart()和prepareData()的代码不详细介绍了,它们的作用就是创建两个QLineSeries序列,显示正弦、余弦曲线,其实现与实例samp9_1类似。

槽函数on_mouseMovePoint(QPoint)的实现代码如下:

void MainWindow::on_mouseMovePoint(QPoint point)
{ //鼠标移动响应
   QPointF pt=ui->chartView->chart()->mapToValue(point); //转换为图表的数值
   labXYValue->setText(QString::asprintf("X=%.1f,Y=%.2f",pt.x(),pt.y()));
}

传递的参数point是chartView的坐标,用QChart:: mapToValue()将视图的坐标转换为图表的坐标,这与Graphics View里视图坐标到场景坐标的转换类似。转换后得到的坐标pt是图表的数值坐标,即显示区在两个坐标轴定义下的坐标,在状态栏上显示此数值坐标的内容,就实现了实时显示鼠标光标处的数值的功能。