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是图表的数值坐标,即显示区在两个坐标轴定义下的坐标,在状态栏上显示此数值坐标的内容,就实现了实时显示鼠标光标处的数值的功能。