Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: ilyagoo от Июнь 19, 2009, 13:26



Название: QPainter::drawPolyline(...) + заливка
Отправлено: ilyagoo от Июнь 19, 2009, 13:26
Рисую спектр функцией drawPolyline(), получается кривая. Как её залить цветом?


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: Rcus от Июнь 19, 2009, 13:53
Painter Paths Example


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: ilyagoo от Июль 28, 2009, 15:41
вот пример:
Код:
   int LEN = 640;
   QPoint arr[LEN];
   for (int i = 0; i < LEN; i ++)
   {
      arr[i].rx() = i;
      if (315 < i && i < 320)
         arr[i].ry() = LEN;
      else if ( i % 2 == 0 || i % 3)
         arr[i].ry() = 20;
      else
         arr[i].ry() = 0;
   }

   arr[LEN].rx() = LEN - 1;
   arr[LEN].ry() = 0;
   arr[LEN + 1].rx() = 0;
   arr[LEN + 1].ry() = 0;

рисую в paintEvent:

Код:
void paintEvent(QPaintEvent *ev)
{
   QPainter painter(this);
   painter.setPen(QColor(Qt::black));
   painter.setBrush(QBrush(QColor(Qt::white)));

// некая трансформация QPainter...

   // рисование
   painter.drawPolygon(arr, LEN + 2);
}

в итоге заливка есть, но кривая: иногда частично вне кривой (тогда эта часть заливается не полностью).
как с этим справиться?


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: Rcus от Июль 28, 2009, 17:48
/* Здесь некая гипотеза о трансформациях*/
Кстати, вам не страшно домой ходить после такого кода? :) (Я бы побоялся выходить за границу массива на два элемента)


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: ilyagoo от Июль 28, 2009, 21:49
/* Здесь некая гипотеза о трансформациях*/
Кстати, вам не страшно домой ходить после такого кода? :) (Я бы побоялся выходить за границу массива на два элемента)
неа, не страшно ;D
код был написан в  paintEvent(...) (Ctrl+C, Ctrl+V), а то, что перед ним - случайность, написанная на форуме ;)

но, как это чаще всего бывает, кто-то изъявляет желание использовать линейку не по назначению)))

все еще жду ответа на вопрос... спасибо.


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: Rcus от Июль 28, 2009, 22:11
Странная дискуссия на мой взгляд. Порой кажется что мои намеки должны быть потолще, а флеймоустойчивость ниже.


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: pastor от Июль 28, 2009, 22:21
все еще жду ответа на вопрос... спасибо.


Код
C++ (Qt)
  arr[LEN].rx() = LEN - 1;
  arr[LEN].ry() = 0;
  arr[LEN + 1].rx() = 0;
  arr[LEN + 1].ry() = 0;


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: ilyagoo от Июль 28, 2009, 22:32
Странная дискуссия на мой взгляд. Порой кажется что мои намеки должны быть потолще, а флеймоустойчивость ниже.
вот и я о том же. а мне кажется, что ответы должны быть ближе к теме. ведь никто же не мешает Вам оказать своим ответом неоценимую помощь кому бы то ни было, также есть возможность пройти мимо, если ответ Вам неведом. также можно вступить в дискуссию по теме, а не указывать на мелкие погрешности к ней не относящиеся. я же не говорю, что в двух Ваших предложениях не хватает минимум двух запятых :(


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: pastor от Июль 28, 2009, 22:37
Rcus имел ввиду следующее:

У тебя массив на 640 элементов (0...639). А ты в нижеприведенном коде выходишь за его пределы:
Код
C++ (Qt)
  arr[LEN].rx() = LEN - 1;        // arr[640]
  arr[LEN].ry() = 0;                // arr[640]
  arr[LEN + 1].rx() = 0;           // arr[641]
  arr[LEN + 1].ry() = 0;           // arr[641]
 


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: ilyagoo от Июль 28, 2009, 22:41
все еще жду ответа на вопрос... спасибо.


Код
C++ (Qt)
  arr[LEN].rx() = LEN - 1;
  arr[LEN].ry() = 0;
  arr[LEN + 1].rx() = 0;
  arr[LEN + 1].ry() = 0;

То, что здесь было написано
Код:
   QPoint arr[LEN];
,
а не
Код:
   QPoint arr[LEN + 2];
еще не говорит о том, что я испытываю проблемы с подобного рода вещами. повторюсь, это была опечатка. можете не продолжать обсуждение.


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: Rcus от Июль 29, 2009, 03:13
...............
Ладно, спрошу прямо. Почему вы не хотите предоставить полную информацию для решения проблемы и при этом ждете помощи? Да я о трансформации QPainter, потому что без нее у меня все нормально работает, а искать матрицу преобразований при которой произойдет чудо нет времени.


Название: Re: QPainter::drawPolyline(...) + заливка
Отправлено: ilyagoo от Июль 30, 2009, 21:06
Почему вы не хотите предоставить полную информацию для решения проблемы и при этом ждете помощи? Да я о трансформации QPainter, потому что без нее у меня все нормально работает, а искать матрицу преобразований при которой произойдет чудо нет времени.

вот зазипованный пример. если не использовать трансформацию, то, ясное дело, заливка будет нормальной, вот только при изменении размера формы рисунок не разтянется. в примере заливка нормально работает, пока количество точек W совпадает с шириной формы, иначе все плохо((