где
236 void Plotter::drawCurves(QPainter *painter)
237 {
238 static const QColor colorForIds[6] = {
239 Qt::red, Qt::green, Qt::blue, Qt::cyan, Qt::magenta, Qt::yellow };
240 PlotSettings settings = zoomStack[curZoom];
241 QRect rect(Margin, Margin,
242 width - 2 * Margin, height - 2 * Margin);
243 if (!rect.isValid)
244 return;
245 painter->setClipRect(rect.adjusted(+1, +1, -1, -1));
246 QMapIterator
247 while (i.hasNext) {
248 i.next;
249 int id = i.key;
250 const QVector
251 QPolygonF polyline(data.count);
252 for (int j = 0; j < data.count; ++j) {
253 double dx = data[j].x - settings.minX;
254 double dy = data[j].y - settings.minY;
255 double x = rect.left + (dx * (rect.width - 1)
256 / settings.spanX);
257 double у = rect.bottom - (dy * (rect.height - 1)
258 / settings.spanY);
259 polyline[j] = QPointF(x, у);
260 }
261 painter->setPen(colorForIds[uint(id) % 6]);
262 painter->drawPolyline(polyline);
263 }
264 }
Функция
Затем мы выполняем цикл по всем кривым, используя итератор в стиле Java, и для каждой кривой мы выполняем цикл по ее точкам
После преобразования всех точек кривой в систему координат виджета мы устанавливаем цвет пера для кривой (используя один из наборов заранее определенных цветов) и вызываем
Этим мы завершаем построение класса
265 PlotSettings::PlotSettings
266 {
267 minX = 0.0;
268 maxX = 10.0;
269 numXTicks = 5;
270 minY = 0.0;
271 maxY = 10.0;
272 numYTicks = 5;
273 }
Конструктор
274 void PlotSettings::scroll(int dx, int dy)
275 {
276 double stepX = spanX / numXTicks;
277 minX += dx * stepX;
278 maxX += dx * stepX;
279 double stepY = spanY / numYTicks;
280 minY += dy * stepY;
281 maxY += dy *stepY;
282 }
Функция
283 void PlotSettings::adjust
284 {