рисую спектр (кривую), изменяя систему координат через QPainter.translate() и QPainter.scale(). заливаю её цветом. начинаю изменять размер виджета и сразу получаю кривую заливку - то внутри не залита, то наружу вылезает. можно ли как-то решить эту проблему? пример вложен.
заранее спасибо.
zalivka.h
#ifndef ZALIVKA_H
#define ZALIVKA_H
#include <QWidget>
#define W 600 // количество точек
#define H 300
class Zalivka : public QWidget
{
Q_OBJECT
public:
Zalivka( QWidget *parent = 0, Qt::WFlags flags = 0 );
~Zalivka();
protected:
void paintEvent( QPaintEvent * );
void timerEvent( QTimerEvent * );
QPoint arr[W + 2];
};
#endif // ZALIVKA_H
zalivka.cpp
#include "zalivka.h"
#include <QPainter>
Zalivka::Zalivka( QWidget *parent, Qt::WFlags flags )
: QWidget( parent, flags )
{
startTimer( 500 );
}
Zalivka::~Zalivka()
{
}
void Zalivka::paintEvent( QPaintEvent * ) {
QPainter painter( this );
painter.translate( 0, height() - 1 );
painter.scale( float( width() ) / float( W ), - float( height() ) / float( H ) );
painter.setBrush( QBrush( Qt::black ) );
painter.drawPolygon( arr, W + 2 );
}
void Zalivka::timerEvent( QTimerEvent * )
{
for ( int i = 0; i < W; i ++ ) {
arr[ i ].rx() = i;
arr[ i ].ry() = qrand() % H;
}
arr[ W ].rx() = W - 1;
arr[ W ].ry() = 0;
arr[ W + 1 ].rx() = 0;
arr[ W + 1 ].ry() = 0;
update();
}
main.cpp
#include <QtGui/QApplication>
#include "zalivka.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Zalivka w;
w.show();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
return a.exec();
}