qt实现画图功能
使用的语言是C++,需要从网上下载两个文件qcustomplot.cpp和其头文件,原有的plots类不清楚是否是自带的,也是被需要的文件。
整体逻辑是从数据库中取数后显示到界面上
例子如下:
void db_data::draw1()
{
QVector
double Hs;
QString time;
QSqlQuery *query = new QSqlQuery;
QDateTime startTime=ui.edit_startTime->dateTime();
QDateTime endTime=ui.edit_endTime->dateTime();
QString stime=ui.edit_startTime->dateTime().toString("yyyy-MM-dd");
QString etime=ui.edit_endTime->dateTime().toString("yyyy-MM-dd");
if(startTime>endTime)
{
QMessageBox::information(NULL, "查询错误", QString::fromLocal8Bit("查询出错,请重新选择时间"), QMessageBox::Yes);
return;
}
QString sql=QString("select row_number() over(order by id desc) as ID,Hs,time from history_data where DATE_FORMAT(time, '%Y-%m-%d')>='%1' and DATE_FORMAT(time, '%Y-%m-%d')<='%2'").arg(stime).arg(etime);
query->prepare(sql);
query->exec();
int numb=0;
while (query->next())
{
tbData[0][numb]=query->value(1).toString();
tbData[1][numb]=query->value(2).toDateTime().toString("hh:mm:ss");
numb++;
}
for(int i=0;i<numb;i++)
{
x.push_back(i);
y.push_back(tbData[0][i].toDouble());
xText.push_back(tbData[1][i]);
}
QCustomPlot *plot=new QCustomPlot;
m_plot->initPlot(plot);
plot->xAxis->setRange(0,25);
plot->yAxis->setRange(0,1.5);
// 设置坐标轴名称
plot->xAxis->setLabel(QString::fromLocal8Bit("时间"));
plot->yAxis->setLabel(QString::fromLocal8Bit("前池水位"));
plot->setWindowTitle(QString::fromLocal8Bit("水位过程线"));
QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
textTicker->addTicks(x, xText);
plot->xAxis->setTicker(textTicker);
plot->xAxis->setTickLabelRotation(60);
plot->xAxis->setSubTicks(false);
plot->xAxis->setTickLength(0,2);
plot->addGraph();
plot->graph(0)->setData(x,y);
plot->graph(0)->setPen(QPen(Qt::blue));
plot->replot(); //调用画图函数,画图
plot->showMaximized();
}
plots类
include "plot.h"
pragma comment(lib,"ws2_32.lib")
- plot::plot(QObject *parent)
- QObject(parent)
{
QCustomPlot *plot=new QCustomPlot;
initPlot(plot);
plot->show();
}
plot::~plot()
{
}
void plot::initPlot(QCustomPlot *pCustomPlot)
{
QSharedPointer
yticker->setSubTickCount(10); //加三个小刻度
QSharedPointer
xticker->setSubTickCount(10); //加三个小刻度
// 设置坐标轴名称
pCustomPlot->xAxis->setPadding(20);//设置坐标轴距离边界距离
pCustomPlot->yAxis->setPadding(20);
//设置背景色
pCustomPlot->setBackground(QColor(244,244,244));
// 设置x/y轴文本色、轴线色、字体等
pCustomPlot->xAxis->setTickLabelColor(Qt::black);
pCustomPlot->xAxis->setLabelColor(QColor(0, 160, 230));
pCustomPlot->xAxis->setBasePen(QPen(QColor(32, 178, 170)));
pCustomPlot->xAxis->setTickPen(QPen(QColor(128, 0, 255)));
pCustomPlot->xAxis->setSubTickPen(QColor(255, 165, 0));
QFont xFont = pCustomPlot->xAxis->labelFont();
pCustomPlot->xAxis->setLabelFont(xFont);
pCustomPlot->yAxis->setTickLabelColor(Qt::black);
pCustomPlot->yAxis->setLabelColor(QColor(0, 160, 230));
pCustomPlot->yAxis->setBasePen(QPen(QColor(32, 178, 170)));
pCustomPlot->yAxis->setTickPen(QPen(QColor(128, 0, 255)));
pCustomPlot->yAxis->setSubTickPen(QColor(255, 165, 0));
QFont yFont = pCustomPlot->yAxis->labelFont();
pCustomPlot->yAxis->setLabelFont(yFont);
pCustomPlot->replot();
}