Russian Qt Forum
Сентябрь 24, 2024, 14:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPainter::drawPolyline(...) + заливка  (Прочитано 10433 раз)
ilyagoo
Гость
« : Июнь 19, 2009, 13:26 »

Рисую спектр функцией drawPolyline(), получается кривая. Как её залить цветом?
« Последнее редактирование: Июнь 19, 2009, 13:32 от ilyagoo » Записан
Rcus
Гость
« Ответ #1 : Июнь 19, 2009, 13:53 »

Painter Paths Example
Записан
ilyagoo
Гость
« Ответ #2 : Июль 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);
}

в итоге заливка есть, но кривая: иногда частично вне кривой (тогда эта часть заливается не полностью).
как с этим справиться?
Записан
Rcus
Гость
« Ответ #3 : Июль 28, 2009, 17:48 »

/* Здесь некая гипотеза о трансформациях*/
Кстати, вам не страшно домой ходить после такого кода? Улыбающийся (Я бы побоялся выходить за границу массива на два элемента)
Записан
ilyagoo
Гость
« Ответ #4 : Июль 28, 2009, 21:49 »

/* Здесь некая гипотеза о трансформациях*/
Кстати, вам не страшно домой ходить после такого кода? Улыбающийся (Я бы побоялся выходить за границу массива на два элемента)
неа, не страшно Смеющийся
код был написан в  paintEvent(...) (Ctrl+C, Ctrl+V), а то, что перед ним - случайность, написанная на форуме Подмигивающий

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

все еще жду ответа на вопрос... спасибо.
Записан
Rcus
Гость
« Ответ #5 : Июль 28, 2009, 22:11 »

Странная дискуссия на мой взгляд. Порой кажется что мои намеки должны быть потолще, а флеймоустойчивость ниже.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Июль 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;
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ilyagoo
Гость
« Ответ #7 : Июль 28, 2009, 22:32 »

Странная дискуссия на мой взгляд. Порой кажется что мои намеки должны быть потолще, а флеймоустойчивость ниже.
вот и я о том же. а мне кажется, что ответы должны быть ближе к теме. ведь никто же не мешает Вам оказать своим ответом неоценимую помощь кому бы то ни было, также есть возможность пройти мимо, если ответ Вам неведом. также можно вступить в дискуссию по теме, а не указывать на мелкие погрешности к ней не относящиеся. я же не говорю, что в двух Ваших предложениях не хватает минимум двух запятых Грустный
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Июль 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]
 
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ilyagoo
Гость
« Ответ #9 : Июль 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];
еще не говорит о том, что я испытываю проблемы с подобного рода вещами. повторюсь, это была опечатка. можете не продолжать обсуждение.
Записан
Rcus
Гость
« Ответ #10 : Июль 29, 2009, 03:13 »

...............
Ладно, спрошу прямо. Почему вы не хотите предоставить полную информацию для решения проблемы и при этом ждете помощи? Да я о трансформации QPainter, потому что без нее у меня все нормально работает, а искать матрицу преобразований при которой произойдет чудо нет времени.
Записан
ilyagoo
Гость
« Ответ #11 : Июль 30, 2009, 21:06 »

Почему вы не хотите предоставить полную информацию для решения проблемы и при этом ждете помощи? Да я о трансформации QPainter, потому что без нее у меня все нормально работает, а искать матрицу преобразований при которой произойдет чудо нет времени.

вот зазипованный пример. если не использовать трансформацию, то, ясное дело, заливка будет нормальной, вот только при изменении размера формы рисунок не разтянется. в примере заливка нормально работает, пока количество точек W совпадает с шириной формы, иначе все плохо((
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.104 секунд. Запросов: 23.