Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.165.131] |
|
Сообщ.
#1
,
|
|
|
Есть основной виджет-экран, на котором расположен слой с диаграммой и параметрами.
Диаграмму (PowerChart ) строит отдельный виджет. По таймеру в основном виджете вызывается метод AddPoint из PowerChart, передающий новые координаты точки, которые нужно нарисовать (в примере пока не потаймеру) PowerChart *pc = new PowerChart(PowerChartType::Plan,0,0, width(),height(), 1, 1,1, 1, this); hlleft->addWidget(pc); pc->addPoint(100,100); pc->setIsDrawPoint(true); pc->addPoint(400,200); pc->setIsDrawPoint(true); Диаграмма рисуется в pixmap, объявлен в заголовке PowerChart. Рисуется в pixmap, для того чтобы при апдейте PowerChart сохранялось ранее нарисованное и добавлялась новая точка. Однако, график обновляется каждый раз полностью, рисуется т.о. только последняя добавленная точка. Что не так делаю? Если ставить флаг и рисовать drawPixmap в paintEvent единожды, то все равно все перерисовывается Или это так и должно быть и нужно запоминать все точки в массиве и каждый раз в paintEvent их перерисовывать ? void PowerChart::paintEvent(QPaintEvent *pe){ Q_UNUSED(pe); ChartFrame::paintEvent(pe); QPainter painter; painter.begin(this); painter.setRenderHint(QPainter::Antialiasing); QTransform transform; transform.translate(3, height()-3); transform.rotate(270); transform.scale(1.0, 1.0); painter.setTransform(transform); painter.drawPixmap(1,1,width()-6,height()-6,*pixmap); painter.end(); if (isDrawPoint) drawPoint(); void PowerChart::drawPoint(){ QPainter p; p.begin(pixmap); p.setPen(QPen(Qt::gray, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); p.setRenderHint(QPainter::Antialiasing); p.drawLine(x1,y1,x2,y2); p.end(); } } |