собрал минимальный прототип. в winXP грузит процессор на 1%, в linux MOPS-7.0 на 100%. методом исключения определил, что грузит строка drawPolyline в paintEvent. может
кто подскажет способ рисования с меньшими затратами?
//gview.h
#ifndef GVIEW_H
#define GVIEW_H
#include <QWidget>
#include <QPainter>
//#include <QDebug>
#include <QTimerEvent>
class Gview : public QWidget
{
    Q_OBJECT
public:
Gview(QWidget *parent = 0);
    ~Gview();
    void setIndex(const int);
    void setStep(const int);
    void setData(const QVector<int> &);
    void setPen(const QPen&);
protected slots:
    void paintEvent(QPaintEvent *);
    void timerEvent(QTimerEvent *);
private:
    QVector<int> ringBuffer;
    int ringIndex;
    int ringStep;
    QPen pen;
};
#endif // GVIEW_H
//gview.cpp
#include "gview.h"
Gview::Gview(QWidget *parent)
    : QWidget(parent)
{
ringIndex = -1;
ringStep = 1;
    QPixmap pm(50,50);
    pm.fill(QColor(230,230,230));
    QPolygon pl;
    pl << QPoint(0,0)<<QPoint(0,50)<<QPoint(0,0)<<QPoint(50,0);
    QPen pen;
    pen.setWidthF(0.1);
    QPainter p;
    p.begin(&pm);
    p.setPen(pen);
    p.drawLines(pl);
    p.end();
    QPalette pal = palette();
    pal.setBrush(this->backgroundRole(),QBrush(QPixmap(pm)));
    setPalette(pal);
startTimer(40);
}
Gview::~Gview()
{
}
void Gview::paintEvent(QPaintEvent *)
{
QPolygon pl;
int size = ringBuffer.size();
for (int i = 0; i< size; i++) {
    int j = (ringIndex + i)%size;
    pl << QPoint(i,ringBuffer.at(j));
    }
QPainter p;
p.begin(this);
p.setPen(pen);
    p.drawPolyline(pl);
    //p.drawPoints(pl);
p.end();
}
void Gview::timerEvent(QTimerEvent *)
{
    ringIndex += ringStep;
    ringIndex %=ringBuffer.size();
    update();
}
void Gview::setPen(const QPen& value)
{
    pen = value;
}
void Gview::setData(const QVector<int>& v)
{
    ringBuffer = v;
}
void Gview::setIndex(const int value)
{
    ringIndex = value;
}
void Gview::setStep(const int value)
{
    ringStep = value;
}
//main.cpp
#include <QApplication>
#include "gview.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QVector<int> v;
    for (int i = 0; i < 800; i ++) v << rand()%200 + 150;
    Gview view;
    view.setFixedSize(800,500);
    view.move(0,0);
    view.setData(v);
    view.setPen(QPen(QBrush(Qt::darkCyan),1,Qt::SolidLine));
    view.setStep(2);;
    view.show();
    return a.exec();
}