qt实现画图功能

使用的语言是C++,需要从网上下载两个文件qcustomplot.cpp和其头文件,原有的plots类不清楚是否是自带的,也是被需要的文件。
整体逻辑是从数据库中取数后显示到界面上
例子如下:
void db_data::draw1()
{
QVector x,y;
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(new QCPAxisTickerText);
yticker->setSubTickCount(10); //加三个小刻度
QSharedPointer xticker(new QCPAxisTickerText);
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();

}

posted @ 2020-11-24 10:10  日不落的冥王星  阅读(508)  评论(0)    收藏  举报