利用QT实现X轴为时间动态显示曲线
生活随笔
收集整理的這篇文章主要介紹了
利用QT实现X轴为时间动态显示曲线
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/**********************************************************************************Author: zyh*Version: 1.0 //版本*Date: 2020-01-08 //完成日期*Description: 主要實現設置第二張圖紙//用于主要說明此程序文件完成的主要功能無輸入值以及返回值 //與其他模塊或函數的接口、輸出值、取值范圍、無/含義及參數間的控制、順序、獨立及依賴關系
**********************************************************************************/
void MainWindow::SetTwoGraph() //設置第二張圖紙
{fp3 = ui->widget_lofar; //創建一個畫圖指針fp3->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom| QCP::iSelectPlottables);//可拖拽+可滾輪縮放QSharedPointer<QCPAxisTickerDateTime> dateTicker(new QCPAxisTickerDateTime);//日期做X軸dateTicker->setDateTimeFormat("hh:mm:ss");//日期格式(可參考QDateTime::fromString()函數)fp3->xAxis->setTicker(dateTicker);//設置X軸為時間軸fp3->xAxis->setLabel("頻率/Hz(單位:*10^4)");//x軸顯示文字fp3->yAxis->setLabel("幅度/dB");//y軸顯示文字//fp3->xAxis->setRange(0,5);//當前X軸顯示范圍fp3->yAxis->setRange(0,2.5);//當前y軸顯示范圍//每條曲線都會獨占一個graph()fp3->addGraph();fp3->graph(0)->setPen(QPen(Qt::blue));//曲線顏色fp3->graph(0)->setBrush(QBrush(QColor(0,255,255,20)));//曲線與X軸包圍區的顏色//自動調整XY軸的范圍,以便顯示出graph(0)中所有的點//給第一個graph設置rescaleAxes(),后續所有graph都設置rescaleAxes(true)即可實現顯示所有曲線/* fp3->graph(0)->rescaleAxes();*///通過傳遞的軸的QCustomPlot進行注冊,簡潔理解QCPColorMap的數據為(x軸,y軸;顏色,值value)m_pColorMap = new QCPColorMap(fp3->xAxis,fp3->yAxis);m_pColorMap->data()->setSize(101,4096);//設置整個圖(x,y)點數,X軸50個點,y軸4096個點m_pColorMap->data()->setRange(QCPRange(0,2.5),QCPRange(2,0));//setRange是設置X軸以及Y軸的范圍// for(int x=0;x<=100;x++)
// {
// for(int y=0;y<4096;y++)
// {
// m_pColorMap->data()->setCell(x,y,qCos(x/10.0)+qSin(y/10.0));
// }
// }m_pColorMap->setGradient(QCPColorGradient::gpCold);//設置默認漸進色變化(可在QCPColorGradient中查看)m_pColorMap->rescaleDataRange(true);dataTimer =new QTimer;connect(dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot()));dataTimer->start(0); // Interval 0 means to refresh as fast as possible
// 立即刷新圖像fp3->rescaleAxes();//自適應大小ui->widget_lofar->replot();
}void MainWindow::realtimeDataSlot()
{//key的單位是秒double key = QDateTime::currentDateTime().toMSecsSinceEpoch()/1000.0;//static QTime time(QTime::currentTime());// calculate two new data points:// double key = time.elapsed()/1000.0;qsrand(QTime::currentTime().msec() + QTime::currentTime().second() * 10000);//使用隨機數產生兩條曲線double value0 = qrand() % 100;double value1 = qrand() % 80;//if (ui->checkBox_temp->isChecked())fp3->graph(0)->addData(key, value0);//添加數據1到曲線1//if (ui->checkBox_hui->isChecked())//fp3->graph(1)->addData(key, value1);//添加數據2到曲線2//刪除8秒之前的數據。這里的8要和下面設置橫坐標寬度的8配合起來//才能起到想要的效果,可以調整這兩個值,觀察顯示的效果。//fp3->graph(0)->removeDataBefore(key-8);//fp3->graph(1)->removeDataBefore(key-8);//自動設定graph(1)曲線y軸的范圍,如果不設定,有可能看不到圖像
//也可以用ui->customPlot->yAxis->setRange(up,low)手動設定y軸范圍fp3->graph(0)->rescaleValueAxis();// ui->customPlot->graph(1)->rescaleValueAxis(true);//這里的8,是指橫坐標時間寬度為8秒,如果想要橫坐標顯示更多的時間//就把8調整為比較大到值,比如要顯示60秒,那就改成60。//這時removeDataBefore(key-8)中的8也要改成60,否則曲線顯示不完整。fp3->xAxis->setRange(key+0.25, 8, Qt::AlignRight);//設定x軸的范圍fp3->replot();
}
最終實現效果如上圖
總結
以上是生活随笔為你收集整理的利用QT实现X轴为时间动态显示曲线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT中在label中插入图片自适应lab
- 下一篇: QByteArray怎么转化为QStri