Qt简单曲线图绘制(Qt5.9 Qt Charts)
效果图:
首先创建工程
工程建立以后进入Mainwindow.ui设计界面,如下图所示:
关键的控件和控件命名已经详细标出,照着弄就完事儿了。废话不多说上代码:
在.pro 包含:QT += charts
mainwindow.h 代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtCharts/QChart>
using namespace QtCharts;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_btnSlineColor_clicked();
void on_btnSplinePointColor_clicked();
void on_chkDataPoint_stateChanged(int arg1);
void on_chkDataPointLabelVisible_stateChanged(int arg1);
private:
//创建光滑曲线序列
void createQSplineSeries();
private:
Ui::MainWindow *ui;
int i = 0;
QList<QString *> m_charts;
QStringList two;
QStringList one;
QStringList five;
};
#endif // MAINWINDOW_H
mainwindow.cpp 代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLineSeries>
#include <QSplineSeries>
#include <QValueAxis>
#include <QCategoryAxis>
#include <QColorDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->tableWidget->setColumnCount(3);
QStringList headText = QStringList() << QStringLiteral("星期") << QStringLiteral("最低温度(°C)") << QStringLiteral("最高温度(°C)");
ui->tableWidget->setHorizontalHeaderLabels(headText);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//设置行数
ui->tableWidget->setRowCount(7);
two <<"周一"<<"周二"<<"周三"<<"周四"<<"周五"<<"周六"<<"周七";
one <<"4"<<"2"<<"5"<<"1"<<"5"<<"2"<<"5";
five <<"11"<<"12"<<"18"<<"14"<<"15"<<"18"<<"17";
for(int i=0;i<7;i++)
{
int col = 0;
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(two.at(i)));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(one.at(i)));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(five.at(i)));
}
createQSplineSeries();
}
void MainWindow::createQSplineSeries()
{
ui->chartViewQSpline->setRenderHint(QPainter::Antialiasing);
ui->chartViewQSpline->chart()->setTitle(QStringLiteral("QSplineSeries演示"));
ui->chartViewQSpline->chart()->setTheme(QChart::ChartThemeDark);
//创建光滑曲线序列,并添加数据
QSplineSeries *spLineSeries = new QSplineSeries;
spLineSeries->setName(QStringLiteral("最高温"));
for (int i = 0; i < ui->tableWidget->rowCount(); i++)
{
spLineSeries->append(i, ui->tableWidget->item(i, 2)->text().toInt());
}
ui->chartViewQSpline->chart()->addSeries(spLineSeries);
//创建坐标轴
QValueAxis *axisX = new QValueAxis;
axisX->setRange(0, 6);
axisX->setTickCount(7);
axisX->setLabelsVisible(false);//x轴坐标显示
QValueAxis *axisY = new QValueAxis;
axisY->setRange(0, 40);
ui->chartViewQSpline->chart()->setAxisX(axisX, spLineSeries);
ui->chartViewQSpline->chart()->setAxisY(axisY, spLineSeries);
//创建折现序列,并添加数据
QLineSeries *lineSeries = new QLineSeries;
lineSeries->setName(QStringLiteral("最低温"));
for (int i = 0; i < ui->tableWidget->rowCount(); i++)
{
lineSeries->append(i, ui->tableWidget->item(i, 1)->text().toInt());
}
ui->chartViewQSpline->chart()->addSeries(lineSeries);
ui->chartViewQSpline->chart()->setAxisX(axisX, lineSeries);
ui->chartViewQSpline->chart()->setAxisY(axisY, lineSeries);
//显示曲线的数据点
lineSeries->setPointsVisible(true);
spLineSeries->setPointsVisible(true);
//图例
ui->chartViewQSpline->chart()->legend()->setAlignment(Qt::AlignBottom);
}
void MainWindow::on_btnSlineColor_clicked()
{//设置光滑曲线:线条颜色
QLineSeries *lineSeries = (QLineSeries *)ui->chartViewQSpline->chart()->series().at(1);
QColor color = lineSeries->pen().color();
color = QColorDialog::getColor(color);
QPen pen = lineSeries->pen();
pen.setColor(color);
lineSeries->setPen(pen);
}
void MainWindow::on_btnSplinePointColor_clicked()
{//设置光滑曲线:数据点颜色
QSplineSeries *splineSeries = (QSplineSeries *)ui->chartViewQSpline->chart()->series().at(0);
QColor color = splineSeries->pen().color();
color = QColorDialog::getColor(color);
QPen pen = splineSeries->pen();
pen.setColor(color);
splineSeries->setPen(pen);
}
void MainWindow::on_chkDataPoint_stateChanged(int arg1)
{//设置光滑曲线:数据点显示
QLineSeries *lineSeries = (QLineSeries *)ui->chartViewQSpline->chart()->series().at(0);
QSplineSeries *splineSeries = (QSplineSeries *)ui->chartViewQSpline->chart()->series().at(1);
if (Qt::Checked == arg1)
{
lineSeries->setPointsVisible(true);
splineSeries->setPointsVisible(true);
}
else
{
lineSeries->setPointsVisible(false);
splineSeries->setPointsVisible(false);
}
}
void MainWindow::on_chkDataPointLabelVisible_stateChanged(int arg1)
{//设置光滑曲线:数据点标签显示
QLineSeries *lineSeries = (QLineSeries *)ui->chartViewQSpline->chart()->series().at(0);
QSplineSeries *splineSeries = (QSplineSeries *)ui->chartViewQSpline->chart()->series().at(1);
if (Qt::Checked == arg1)
{
lineSeries->setPointLabelsVisible(true);
splineSeries->setPointLabelsVisible(true);
}
else
{
lineSeries->setPointLabelsVisible(false);
splineSeries->setPointLabelsVisible(false);
}
}
MainWindow::~MainWindow()
{
delete ui;
}
下载地址:源代码下载
觉得有用的小伙伴不要吝啬你们赞哟~(▽)