На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> Qt 5.7.0. Графика с Qpainter , как рисовать диаграмму в онлайне
    Есть основной виджет-экран, на котором расположен слой с диаграммой и параметрами.
    Диаграмму (PowerChart ) строит отдельный виджет.

    По таймеру в основном виджете вызывается метод AddPoint из PowerChart, передающий новые координаты точки, которые нужно нарисовать
    (в примере пока не потаймеру)
    ExpandedWrap disabled
        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 их перерисовывать ?

    ExpandedWrap disabled
      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();
       
      }



    }
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0212 ]   [ 17 queries used ]   [ Generated: 29.03.24, 02:02 GMT ]