crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> заливка кривых (drawPolyline) и трансформация QPainter
ilyagoo
  опции профиля:
сообщение 31.7.2009, 20:55
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 31.7.2009
Пользователь №: 973

Спасибо сказали: 0 раз(а)




Репутация:   0  


рисую спектр (кривую), изменяя систему координат через 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();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 21.12.2024, 14:57