Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Кроссплатформенный C/C++: cl/gcc/Qt/Gtk+/WxWidgets > Qt 5.7.0. Графика с Qpainter |
Автор: RiZ 16.10.17, 08:58 |
Есть основной виджет-экран, на котором расположен слой с диаграммой и параметрами. Диаграмму (PowerChart ) строит отдельный виджет. По таймеру в основном виджете вызывается метод AddPoint из PowerChart, передающий новые координаты точки, которые нужно нарисовать (в примере пока не потаймеру) <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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 их перерисовывать ? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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(); } } |