Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Skor от Апрель 23, 2007, 16:37



Название: Отрисовка графика функции [Qt-4.2.2]
Отправлено: Skor от Апрель 23, 2007, 16:37
Доброго времени суток. В программировании на Qt являюсь новичком с недельным опытом работы, за прошедшее время попытался разобраться в особенностях новой для меня библиотеки.

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

На данный момент имею представление об общих принципах работы библиотеки, концепции, некоторых простых классов (что приблизительно соответствует первой части книги Бланшет - Basic Qt).

Беглый осмотр содержания выявил класс QPainter, который, возможно, станет ключем к решению проблемы :-) К сожалению, не имею достаточно времени чтобы полностью во всем разобраться и дать самому себе исчерпывающие ответы на все вопросы, поэтому хочу спросить совета у более опытных разработчиков:

1. Есть ли средства, упрощающие/оптимизирующие процесс построения графиков в QT?
2. Является ли класс QPainter хорошим способом решения проблемы?
3. Является ли Qt подходящим инструментом для решения в принципе?
4. Ваш совет


Зарание благодарен


Название: Отрисовка графика функции [Qt-4.2.2]
Отправлено: bigirbis от Апрель 23, 2007, 16:43
Рекомендую посмотреть в сторону Qwt:
http://sourceforge.net/projects/qwt


Название: Отрисовка графика функции [Qt-4.2.2]
Отправлено: Racheengel от Апрель 24, 2007, 00:21
+1


Название: Отрисовка графика функции [Qt-4.2.2]
Отправлено: goer от Апрель 24, 2007, 11:46
QWT прекрасна спору нет, но надо смотеть на задачу. Я например заюзал эту либу, но мне кроме кривых и объемных гистограм, нужно еще рисовать круговые объемные диаграммы. QWT на данный момент этого не реализует.

Вобщем смотри по требованиям к задаче. Ну и еще у этой либы не очень приятная иерархия классов.


Название: Отрисовка графика функции [Qt-4.2.2]
Отправлено: Alex Forth от Апрель 24, 2007, 12:04
Цитата: "goer"
нужно еще рисовать круговые объемные диаграммы. QWT на данный момент этого не реализует.

А как насчет этого: http://qwtplot3d.sourceforge.net/
Цитата: "goer"

Ну и еще у этой либы не очень приятная иерархия классов.

Шо есть, то есть  :cry:


Название: Отрисовка графика функции [Qt-4.2.2]
Отправлено: Racheengel от Апрель 25, 2007, 00:51
да уж, классы конечно там жутко сделаны... да и скорость не очень для больших графиков, нам как-то пришлось патчить это дело...

на www.ii-system.com лежит прога InSense2005 в сырцах, с ускоренными графиками, если надо, берите, смотрите...


Название: Отрисовка графика функции [Qt-4.2.2]
Отправлено: Alex Forth от Апрель 25, 2007, 09:03
Спасибо, на досуге порасматриваю вашу реализацию.
А можно roadmap - за счет чего разгоняли, чего подпадчили?


Название: Отрисовка графика функции [Qt-4.2.2]
Отправлено: Racheengel от Апрель 25, 2007, 23:02
QWT рисует графики по набору точек, соединяя их линиями. Мы перед отрисовкой выкидывали из наборов точки, которые совпали бы на экране. Получалось намного быстрее.


Название: Re: Отрисовка графика функции [Qt-4.2.2]
Отправлено: m_ax от Апрель 28, 2011, 01:12
Понимаю что разговариваю сам с собой... но всетки уже доведу до конца, что сказал... Вот продолжение.. отредактированы графики линий, и сделал горизонтальные столбцы...

Ограничение на те и на другие, что не больше 5-ти элементов должно отображаться...
Поскольку в вызовах этих процедур достаточно много входных параметров, проще будет написать какой-нить редактор для пользования их... у меня есть такой, и просто все это делается для того чтобы в него потом впихнуть....

В общем доделаю остальные графики, и тогда уже последнюю версию положу... как всегда, мало ли кому пригодится...

У вас утечка в методе
Код
C++ (Qt)
void MainWindow::slotDoIt()
 
а именно здесь:
Код
C++ (Qt)
61)  m_pGraphicsClass = new MyGraphics;
 
и ниже здесь:
Код
C++ (Qt)
89)  m_pGraphicsClass = new MyGraphics;
 
У вас каждый раз как вызывается этот слот slotDoIt вновь создаётся в куче MyGraphics (имхо название как то не очень серьёзно)) но нигде не уничтожается.
Да создайте вы его один раз в конструкторе, а деструкторе уничтожте.

Имхо, лучше сделать полноценный класс для отрисовки графиков (полноценный виджет в смысле), а не сомнительный MyGraphics всего с двумя методами, в каждый из которых нужно передавать туеву хучу непонятных параметров.


Название: Re: Отрисовка графика функции [Qt-4.2.2]
Отправлено: m_ax от Апрель 28, 2011, 12:45
У вас ещё в одном месте течёт:
Код
C++ (Qt)
void MyGraphics::line2dGraphics(QVector<double> *data, int nValues
                              , QPoint nAxisPos, int nAxisSize
                              , QStringList sList, QGraphicsScene *pScene
                              , bool bSignValues)
{
 
   double *nMaximumX = new double[nValues];
   double *nMaximumY = new double[nValues];
 
Нигде не уничтожаются и каждый раз при вызове line2dGraphics вновь создаются.

Вобщем пока ещё опасно юзать ваше тварение)


Название: Re: Отрисовка графика функции [Qt-4.2.2]
Отправлено: xokc от Апрель 28, 2011, 17:38
И врядли оно както опасно себя поведет))...
Оно уже крайне опасно себя ведёт.
но, как известно существуют механизмы сбора мусора... ну и если вообще на все закрыть глаза и просто выделять, выделять,выделять,выделять,выделять,выделять,выделять,выделять,выделять,выделять,выделять память))) это сколько ж нужно сделать таких операций, чтобы вообще заметить что "течет"))
Вернитесь назад в шарп или яву - к сборщикам мусора и программированию мышкой. Если бы я был Вашим заказчиком на дал бы и рубля за такую реализацию.


Название: Re: Отрисовка графика функции [Qt-4.2.2]
Отправлено: BaHeK от Апрель 29, 2011, 08:12
...Если бы я был Вашим заказчиком на дал бы и рубля за такую реализацию...

Вы вообще читать умеете? Заказчиком.. рубля... это все сделано в сумме за 2 часа... ито, потому что математика больше времени отняла... Вы блин вообще думаете что говорите? Третий раз повторяю, это все на очень скорую руку! Если бы нужно было сделать профессиональный класс, это блин и ежику понятно что такая реализация вообще и гроша не стоит!

Я прям знал, что такие вот найдутся))  Не нравится, не ешь)) И вообще, чего я буду распинаться тут))


Название: Re: Отрисовка графика функции [Qt-4.2.2]
Отправлено: m_ax от Апрель 29, 2011, 12:27
...Если бы я был Вашим заказчиком на дал бы и рубля за такую реализацию...

Вы вообще читать умеете? Заказчиком.. рубля... это все сделано в сумме за 2 часа... ито, потому что математика больше времени отняла... Вы блин вообще думаете что говорите? Третий раз повторяю, это все на очень скорую руку! Если бы нужно было сделать профессиональный класс, это блин и ежику понятно что такая реализация вообще и гроша не стоит!

Я прям знал, что такие вот найдутся))  Не нравится, не ешь)) И вообще, чего я буду распинаться тут))

Зачем тогда выкладывать сомнительные поделки, сделаные наспех и несущих потенциальную опасность при их использовании?
Я считаю, если выкладывать - то доведите вначале всё до ума, чтоб это было грамотно написано. Иначе рискуете, что вашим кодом никто никогда пользоваться не будет.