C++ (Qt)void GetDrawIndices( const std::vector <QPointF> & data, float drawMin, // левое значение X (начало диапазона просмотра) float drawMax, // правое int index[2] ){ index[0] = std::lower_bound(data.begin(), data.end(), QPointF(drawMin, -1000)) - data.begin(); index[1] = std::upper_bound(data.begin(), data.end(), QPointF(drawMax, -1000)) - data.begin(); if (index[0]) --index[0]; if (index[1]) < data.size()) ++index[1];}
C++ (Qt)int step = 60000 / 300;for( int x = 0; x < 300; ++x ){ int y = data[ x * step ]; setPixel( x, y, color);}
C++ (Qt)inline QPointF ScalePt( const QPointF & src, qreal scaleX, qreal scaleY ){ return QPointF(src.x() * scaleX, src.y() * scaleY); } void Draw( QPainter & painter, const QPointF * pt, int count, qreal scaleX, qreal scaleY ){ QPointF prv = ScalePt(pt[0], scaleX, scaleY); // всегда тянем линию от первой for (int i = 1; i < count - 1; ++i) { QPointF nxt = ScalePt(pt[i], scaleX, scaleY); if ((nxt - prv).x() < 1.0f) continue; painter.drawLine(prv, nxt); prv = nxt; } painter.drawLine(prv, ScalePt(pt[count - 1], scaleX, scaleY); // всегда тянем линию к последней}
QList<кривые, хранящих точки>model_->getData(QRect ); //QRect - область видимости View.