qchart绘制曲线
- 效果图
- 代码
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QLineSeries> #include <QChartView> #include <QChart> #include <QTimer> #include <QValueAxis> #include <QDateTimeAxis> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private slots: void on_pushButtonFlush_clicked(); void slotTimeOut(); private: Ui::Widget *ui; QT_CHARTS_NAMESPACE::QChart* chart; QT_CHARTS_NAMESPACE::QChartView* view; QT_CHARTS_NAMESPACE::QLineSeries* series1; QT_CHARTS_NAMESPACE::QLineSeries* series2; QT_CHARTS_NAMESPACE::QLineSeries* series3; QT_CHARTS_NAMESPACE::QValueAxis* axisY1; QT_CHARTS_NAMESPACE::QValueAxis* axisY2; QT_CHARTS_NAMESPACE::QValueAxis* axisY3; QT_CHARTS_NAMESPACE::QDateTimeAxis* axisTime; QTimer timerFlush; }; #endif // WIDGET_H
#include "widget.h" #include "ui_widget.h" #include <QDateTime> QT_CHARTS_USE_NAMESPACE Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); connect(&timerFlush, SIGNAL(timeout()), this, SLOT(slotTimeOut())); qsrand(QDateTime::currentDateTime().toTime_t()); chart = new QChart; view = new QChartView(chart); view->setRenderHint(QPainter::Antialiasing); ui->stackedWidget->addWidget(view); chart->setTitle("chart test"); axisTime = new QDateTimeAxis; axisTime->setTitleText("Time"); axisTime->setFormat("hh:mm:ss"); axisTime->setMax(QDateTime::currentDateTime()); axisTime->setMin(QDateTime::currentDateTime().addSecs(-60)); chart->addAxis(axisTime, Qt::AlignBottom); chart->setTheme(QChart::ChartThemeBlueCerulean); //Y1 series1 = new QLineSeries; series1->setName("Y1"); chart->addSeries(series1); axisY1 = new QValueAxis; axisY1->setTitleText("Y1"); chart->addAxis(axisY1, Qt::AlignLeft); series1->attachAxis(axisTime); series1->attachAxis(axisY1); series1->setColor(QColor(Qt::blue)); axisY1->setLinePenColor(QColor(Qt::blue)); axisY1->setLabelsColor(QColor(Qt::blue)); axisY1->setRange(0, 100); series1->setPointsVisible(true); series1->setPointLabelsVisible(true); //Y2 series2 = new QLineSeries; series2->setName("Y2"); chart->addSeries(series2); axisY2 = new QValueAxis; axisY2->setTitleText("Y2"); chart->addAxis(axisY2, Qt::AlignLeft); axisY2->setLabelsColor(QColor(Qt::red)); axisY2->setLinePenColor(QColor(Qt::red)); series2->setColor(QColor(Qt::red)); series2->attachAxis(axisTime); series2->attachAxis(axisY2); axisY2->setRange(0, 200); //Y3 series3 = new QLineSeries; series3->setName("Y3"); chart->addSeries(series3); axisY3 = new QValueAxis; axisY3->setTitleText("Y3"); axisY3->setLabelsColor(QColor(Qt::green)); axisY3->setLinePenColor(QColor(Qt::green)); axisY3->setRange(0, 300); chart->addAxis(axisY3, Qt::AlignLeft); series3->setColor(QColor(Qt::green)); series3->attachAxis(axisTime); series3->attachAxis(axisY3); } Widget::~Widget() { delete ui; } void Widget::on_pushButtonFlush_clicked() { if(timerFlush.isActive()){ timerFlush.stop(); }else{ series1->clear(); series2->clear(); series3->clear(); timerFlush.start(1000); } } void Widget::slotTimeOut() { QDateTime dtcur = QDateTime::currentDateTime(); QDateTime dtmin = dtcur.addSecs(ui->spinBox->value()*(-60)); axisTime->setRange(dtmin, dtcur); series1->append(dtcur.toMSecsSinceEpoch(), rand()%100); series2->append(dtcur.toMSecsSinceEpoch(), rand()%200); series3->append(dtcur.toMSecsSinceEpoch(), rand()%300); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!