#include <qwt_scale_map.h>
#include <qwt_plot_curve.h>
#include <qwt_symbol.h>
#include <qwt_math.h>
#include <qcolor.h>
#include <qpainter.h>
#include <qapplication.h>
#include <qframe.h>
//------------------------------------------------------------
// curvdemo1
//
// This example program features some of the different
// display styles of the QwtPlotCurve class
//------------------------------------------------------------
//
// Array Sizes
//
const int Size = 27; //6组,每组27个点
const int CurvCnt = 6;
//
// Arrays holding the values
//
double xval[Size];
double yval[Size];
QwtScaleMap xMap; //比例图
QwtScaleMap yMap;
class MainWin : public QFrame
{
public:
MainWin();
protected:
virtual void paintEvent(QPaintEvent *);//????虚函数
void drawContents(QPainter *p);//画内容
private:
void shiftDown(QRect &rect, int offset) const;//参数为一个矩形,和一个常数
QwtPlotCurve d_curves[CurvCnt];//曲线
};
MainWin::MainWin()
{
int i;
xMap.setScaleInterval(-0.5, 10.5);//纵横起止
yMap.setScaleInterval(-5, 1.1);
//
// Frame style
//
setFrameStyle(QFrame::Box|QFrame::Raised);
setLineWidth(2);//线的宽度
setMidLineWidth(3);//这两个都属于frame类 边框之类的设置
//
// Calculate values
//
for(i=0; i<Size;i++)//27
{
xval[i] = double(i) * 10.0 / double(Size - 1);
yval[i] = qSin(xval[i]) * qCos(2.0 * xval[i]);
}
//
// define curve styles
//
i = 0;
d_curves[i].setSymbol(new QwtSymbol(QwtSymbol::Cross, Qt::NoBrush,
QPen(Qt::black), QSize(5, 5) ) );
d_curves[i].setPen(QColor(Qt::darkGreen));
d_curves[i].setStyle(QwtPlotCurve::Lines);
d_curves[i].setCurveAttribute(QwtPlotCurve::Fitted);
i++;
d_curves[i].setSymbol(new QwtSymbol(QwtSymbol::Ellipse, Qt::yellow,
QPen(Qt::blue), QSize(5, 5) ) );
d_curves[i].setPen(QColor(Qt::red));
d_curves[i].setStyle(QwtPlotCurve::Sticks);
i++;
d_curves[i].setPen(QColor(Qt::darkBlue));
d_curves[i].setStyle(QwtPlotCurve::Lines);
i++;
d_curves[i].setPen(QColor(Qt::darkBlue));
d_curves[i].setStyle(QwtPlotCurve::Lines);
d_curves[i].setRenderHint(QwtPlotItem::RenderAntialiased);
i++;
d_curves[i].setPen(QColor(Qt::darkCyan));
d_curves[i].setStyle(QwtPlotCurve::Steps);
i++;
d_curves[i].setSymbol(new QwtSymbol(QwtSymbol::XCross, Qt::NoBrush,
QPen(Qt::darkMagenta), QSize(5, 5) ) );
d_curves[i].setStyle(QwtPlotCurve::NoCurve);
i++;
//
// attach data
//
for(i=0;i<CurvCnt;i++)
d_curves[i].setRawSamples(xval, yval, Size);//用点连线
}
void MainWin::shiftDown(QRect &rect, int offset) const
{
rect.translate(0, offset); //下移矩形
}
void MainWin::paintEvent(QPaintEvent *event)
{
QFrame::paintEvent(event);
QPainter painter(this);
painter.setClipRect(contentsRect());//设置裁剪区域为矩形x、y、w、h并且使裁剪生效。裁剪模式被设置为m。
drawContents(&painter);
}
//
// REDRAW CONTENTS 重画
//
void MainWin::drawContents(QPainter *painter)
{
int deltay,i;
QRect r = contentsRect();
deltay = r.height() / CurvCnt - 1;
r.setHeight(deltay);
//
// draw curves 画线
//
for (i=0;i<CurvCnt;i++)
{
xMap.setPaintInterval(r.left(), r.right());
yMap.setPaintInterval(r.top(), r.bottom());
painter->setRenderHint(QPainter::Antialiasing,
d_curves[i].testRenderHint(QwtPlotItem::RenderAntialiased) );
d_curves[i].draw(painter, xMap, yMap, r);
shiftDown(r, deltay);
}
//
// draw titles
//
r = contentsRect(); // reset r
painter->setFont(QFont("Helvetica", 8));
const int alignment = Qt::AlignTop|Qt::AlignHCenter;
painter->setPen(Qt::black);
painter->drawText(0,r.top(),r.width(), painter->fontMetrics().height(),
alignment, "Style: Line/Fitted, Symbol: Cross");
shiftDown(r, deltay);
painter->drawText(0,r.top(),r.width(), painter->fontMetrics().height(),
alignment, "Style: Sticks, Symbol: Ellipse");
shiftDown(r, deltay);
painter->drawText(0 ,r.top(),r.width(), painter->fontMetrics().height(),
alignment, "Style: Lines, Symbol: None");
shiftDown(r, deltay);
painter->drawText(0 ,r.top(),r.width(), painter->fontMetrics().height(),
alignment, "Style: Lines, Symbol: None, Antialiased");
shiftDown(r, deltay);
painter->drawText(0, r.top(),r.width(), painter->fontMetrics().height(),
alignment, "Style: Steps, Symbol: None");
shiftDown(r, deltay);
painter->drawText(0,r.top(),r.width(), painter->fontMetrics().height(),
alignment, "Style: NoCurve, Symbol: XCross");
}
int main (int argc, char **argv)
{
QApplication a(argc, argv);
MainWin w;
w.resize(300,600);
w.show();
return a.exec();
}
Qt qwt的example
最新推荐文章于 2022-10-29 10:54:06 发布