LINUX.ORG.RU

поискал и нашел

по ходу действительно так.
вот что про это говорит assistant:
paintEvent() is called whenever the widget needs to be repainted. Every widget displaying custom content must implement it. Painting using a QPainter can only take place in a paintEvent() or a function called by a paintEvent().

trex6 ★★★★★
() автор топика
Ответ на: комментарий от drakmail

Кроме того, что его необходимо вызывать, нужно еще и свой класс писать, наследовать его и параметры для рисования туда передавать и процедуру переписывать.
Короче - одна морока.
Вобщем мое мнение о Qt резко упало на пару пунктов.

P.S. Честно говоря удивило, что все так сложно. Может быть кто-нибудь подскажет, для чего такие танцы с музыкальными инструментами были придуманны. Можно ведь оставить возможность для рисования на виджете в любобй момент и было бы все проще дышать.

trex6 ★★★★★
() автор топика
Ответ на: комментарий от trex6

> P.S. Честно говоря удивило, что все так сложно. Может быть кто-нибудь подскажет, для чего такие танцы с музыкальными инструментами были придуманны. Можно ведь оставить возможность для рисования на виджете в любобй момент и было бы все проще дышать.

А что нарисовать-то надо? Я почти уверен, что есть способ лучше, чем тот, который ты хочешь.

name_no ★★
()
Ответ на: комментарий от lester

Вобщем такое дело.
В одном из классов я считаю значения по хитрым формулам.
Там данные хранятся в массиве. Причем каждый элемент в массиве - это структура (например 3 координаты, если по быстрому), ну а индексы массива - это время. В итоге мне нужно нарисовать графики зависимости каждой переменной от времени.
Возможно для этого и есть какие-то специальные виджеты, но я в эту сторону не копал. Плюс каждая координата хранится не в отдельном массиве (уже так и будет, т.к. много кода уже написанно для этого определения), а как часть структуры.

В итоге я для каждой переменной переганяю ее значения за весь период в отдельный массив и потом скармливаю своему классу, который унаследован от QWidget. В нем все эти данные переносятся во внутренние структуры класса, ну а потом запускается repaint, ну а дальше в paintEvent я графики спокойненько отрисовываю.
Вобщем сложно как-то. И, лично на мой взгляд - через жоп^W неверные методы.

Если у кого-то есть мысли как зделать это лучше - с удовольствием выслушаю.

trex6 ★★★★★
() автор топика
Ответ на: комментарий от name_no

>А что нарисовать-то надо? Я почти уверен, что есть способ лучше, чем тот, который ты хочешь.

Уверен, что в любом случае можно все равно будет придумать что-то еще лучше. И так до бесконечности =) ;-)

trex6 ★★★★★
() автор топика
Ответ на: комментарий от trex6

> Вобщем мое мнение о Qt резко упало на пару пунктов.

Добро пожаловать в реальную жизнь. Если ты хочешь реализовать виджет со своим поведением отличным от базовых виджетов - то тебе придется это делать. Просто разберешся с базовыми концепциями, почитаешь ис ходники нескольких виджетов - и не будешь парится. Если конечно тебе надо писать GUI и не хочешь быдлокодить всю жизнь.

И не стоит боятся писать свои классы - это обычное дело, если посмотришь в примеры - или иначе стоит всерьез посмотреть на GTK или другие языки которые не C++ - там-то уж точно никакое наследование тебе не грозит ;)

Spectr ★★★
()
Ответ на: комментарий от trex6

> Если у кого-то есть мысли как зделать это лучше

Генерь JPEG (или другую картинку) его скармливай потом QImage или что тебе там подойдет. Бред конечно, но похоже тебе будет кошерно.

> Возможно для этого и есть какие-то специальные виджеты, но я в эту сторону не копал.

стоит покопать.

Spectr ★★★
()
Ответ на: комментарий от trex6

Не нужно велосипедить рисование графиков прямо на виджете. Используйте QGraphicsScene+QGraphicsView.

Кроме того не разумно хранить данные в одних массивах, перегонять их в другие и затем только рисовать. Если данных много, а графики динамические, рискуете погореть на нехватке памяти и тормозах при ее вытягивании из сусек.

staseg ★★★★★
()
Ответ на: комментарий от trex6

>Может быть кто-нибудь подскажет, для чего такие танцы с музыкальными инструментами были придуманны.

Могу врать, но вроде яблочники с некоторых пор ввели такое ограничение и Qt пришлось пойти по их стопам ради кроссплатформенности.

devinull ★★
()
Ответ на: комментарий от Spectr

Проблем то со своими виджетами, унаследованными от QWidget, не возникает. Просто на это приходится тратить хоть и не так много, но времени.

Когда проводил рефакторинг кода, решил в старом все же разбить один массив со структурами на несколько массивов. Так что теперь от перегонки туда-сюда удалось избавится.

За ссылки на библиотеки - спасибо. Если будет время - обязательно гляну. Просто завтра все это уже нужно будет на конференции демнострировать, а я решил новых фишек понавешивать.

Спасибо всем, кто откликнулся.

trex6 ★★★★★
() автор топика
Ответ на: комментарий от trex6

у тебя данные обновляются в бэкграунде?
1) да: повесить таймер на update никак?
2) нет: тебе, кроме paintEvent ничего не нужно! он вызывается, когда окно действительно необходимо перерисовать (разворачивание, выход на первый план). если же само окно поверх остальных - paintEvent не будет вызываться, что и правильно! нефиг проц лишними задачами грузить.

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.