qt读取文件里的数据并做折线图 并鼠标触碰显示
void MainWindow::chartShow1()
{
strText =ui->dateTimeEdit->text(); //传递日期
strText.remove(4,1).remove(6,1).remove(8,1).remove(10,1);
strText2=ui->dateTimeEdit_2->text();
strText2.remove(4,1).remove(6,1).remove(8,1).remove(10,1);
for (int i = 0; i < str_path_list.size(); i++)
{
QString str_path = str_path_list[i];
file_list.append(str_path);
}
foreach(QString name , file_list)
{
chart = new QChart(); //创建图表
chartView = new QChartView(chart);//创建图表显示
series0 = new QLineSeries(); //创建折线
series2 = new QScatterSeries();//创建散列点为了触发显示
series2->setMarkerShape(QScatterSeries::MarkerShapeCircle);//圆形的点
series2->setBorderColor(QColor(21, 100, 255)); //边框颜色
series2->setBrush(QBrush(QColor(21, 100, 255)));//背景颜色
series2->setMarkerSize(8); //点大小
chart->addSeries(series0);
chart->addSeries(series2);
axisX = new QCategoryAxis();
axisY = new QValueAxis();
series0 = (QLineSeries *)chartView->chart()->series().at(0); //把压进去的再取出来通过chartview显示修改
series2 = (QScatterSeries *)chartView->chart()->series().at(1);
QFile f(name);
if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()<< "Open failed." << endl;
}
QTextStream txtInput(&f);
int numK= 0;
double numK2=0.0;
QString data,data2;
qreal linepoint;
while (!txtInput.atEnd())
{
QString lineStr;
QStringList linedata;
lineStr = txtInput.readLine(); //读取一行
linedata = lineStr.split("*"); //根据空格来分成多个数据
data=linedata.at(1);
if(strText<=data && data<=strText2)
{
data2=linedata.at(0);
linepoint=data2.toDouble();
qDebug()<<linepoint;
if(numK2<linepoint)
{
numK2=linepoint;
}
series0->append(numK,linepoint);
series2->append(numK,linepoint);
data.insert(4,"/").insert(7,"/").insert(10," ").insert(13,":");
axisX->append(data,numK);//为了后面的鼠标悬停显示日期
numK++;//读取行数
}
}
axisX2= axisX->categoriesLabels();//以容器的方式取出x轴上的日期
axisX->setRange(0, --numK);
axisX->setStartValue(0);
axisX->setLabelsAngle(90);
axisX->setLabelsPosition(QCategoryAxis::AxisLabelsPositionOnValue);//将categories对应x轴
axisX->setGridLineVisible(false);
axisX->setMinorGridLineVisible(false);
axisY->setRange(0,numK2+0.5);
chart->setAxisX(axisX, series0);
chart->setAxisY(axisY, series0);
chart->setAxisX(axisX, series2);
chart->setAxisY(axisY, series2);
connect(series2, &QScatterSeries::hovered, this, &MainWindow::slotPointHoverd);//用于触发鼠标移动到点上显示数值
chart->legend()->hide();
chart->setTitle("原始数据");
chartView->setRenderHint(QPainter::Antialiasing);
ui->gridLayout_6->addWidget(chartView,1,0); //ui显示
}
}