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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отрисовка графика функции [Qt-4.2.2]  (Прочитано 16260 раз)
Skor
Гость
« : Апрель 23, 2007, 16:37 »

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

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

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

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

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


Зарание благодарен
Записан
bigirbis
Гость
« Ответ #1 : Апрель 23, 2007, 16:43 »

Рекомендую посмотреть в сторону Qwt:
http://sourceforge.net/projects/qwt
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Апрель 24, 2007, 00:21 »

+1
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
goer
Гость
« Ответ #3 : Апрель 24, 2007, 11:46 »

QWT прекрасна спору нет, но надо смотеть на задачу. Я например заюзал эту либу, но мне кроме кривых и объемных гистограм, нужно еще рисовать круговые объемные диаграммы. QWT на данный момент этого не реализует.

Вобщем смотри по требованиям к задаче. Ну и еще у этой либы не очень приятная иерархия классов.
Записан
Alex Forth
Гость
« Ответ #4 : Апрель 24, 2007, 12:04 »

Цитата: "goer"
нужно еще рисовать круговые объемные диаграммы. QWT на данный момент этого не реализует.

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

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

Шо есть, то есть  :cry:
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Апрель 25, 2007, 00:51 »

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

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alex Forth
Гость
« Ответ #6 : Апрель 25, 2007, 09:03 »

Спасибо, на досуге порасматриваю вашу реализацию.
А можно roadmap - за счет чего разгоняли, чего подпадчили?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Апрель 25, 2007, 23:02 »

QWT рисует графики по набору точек, соединяя их линиями. Мы перед отрисовкой выкидывали из наборов точки, которые совпали бы на экране. Получалось намного быстрее.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #8 : Апрель 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 всего с двумя методами, в каждый из которых нужно передавать туеву хучу непонятных параметров.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #9 : Апрель 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 вновь создаются.

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

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #10 : Апрель 28, 2011, 17:38 »

И врядли оно както опасно себя поведет))...
Оно уже крайне опасно себя ведёт.
но, как известно существуют механизмы сбора мусора... ну и если вообще на все закрыть глаза и просто выделять, выделять,выделять,выделять,выделять,выделять,выделять,выделять,выделять,выделять,выделять память))) это сколько ж нужно сделать таких операций, чтобы вообще заметить что "течет"))
Вернитесь назад в шарп или яву - к сборщикам мусора и программированию мышкой. Если бы я был Вашим заказчиком на дал бы и рубля за такую реализацию.
Записан
BaHeK
Гость
« Ответ #11 : Апрель 29, 2011, 08:12 »

...Если бы я был Вашим заказчиком на дал бы и рубля за такую реализацию...

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

Я прям знал, что такие вот найдутся))  Не нравится, не ешь)) И вообще, чего я буду распинаться тут))
« Последнее редактирование: Апрель 29, 2011, 08:16 от joy » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #12 : Апрель 29, 2011, 12:27 »

...Если бы я был Вашим заказчиком на дал бы и рубля за такую реализацию...

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

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

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

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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