crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

5 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Дополнительный виджет, Плоттер
++Norton++
  опции профиля:
сообщение 4.3.2009, 23:38
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Спасибо сказали: 0 раз(а)




Репутация:   1  


Столкнулся с такой проблемой, нужно написать программу, которая будет строить определенный график, но в Qt не нашел виджета-плоттера. :(
Подскажите пожалуйста, есть ли какая-нибудь возможность решить эту проблему? Как отобразить график? Может есть какие-нибудь дополнительные виджеты?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 5.3.2009, 0:04
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Это? http://qwt.sourceforge.net/class_qwt_plot.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 5.3.2009, 0:19
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(++Norton++ @ 4.3.2009, 23:38) *
Столкнулся с такой проблемой, нужно написать программу, которая будет строить определенный график, но в Qt не нашел виджета-плоттера. :(
Подскажите пожалуйста, есть ли какая-нибудь возможность решить эту проблему? Как отобразить график? Может есть какие-нибудь дополнительные виджеты?

Если решишь делать своими руками - помогу. Можно обойтись и без Qwt! Я эту задачу решил и знаю как делать!

Сообщение отредактировал AD - 5.3.2009, 0:20
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
++Norton++
  опции профиля:
сообщение 5.3.2009, 0:34
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Спасибо сказали: 0 раз(а)




Репутация:   1  


SABROG, спасибо, пробовал, скачивал, только не получилось его в QtDesigner добавить :(
AD, отлично, с удовольствием хотел бы попробовать, буду очень благодарен за помощь!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 5.3.2009, 0:35
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(++Norton++ @ 5.3.2009, 0:34) *
SABROG, спасибо, пробовал, скачивал, только не получилось его в QtDesigner добавить :(
AD, отлично, с удовольствием хотел бы попробовать, буду очень благодарен за помощь!

Хорошо. Завтра вечером кое-что из кода выложу. Извини, сегодня спать хочется и голова побаливает!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
++Norton++
  опции профиля:
сообщение 5.3.2009, 0:50
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Спасибо сказали: 0 раз(а)




Репутация:   1  


Конечно, все отлично, буду ждать! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.3.2009, 8:16
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


++Norton++, про Qwt есть отдельная тема, почитай там было обсуждение проблем со сборкой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 5.3.2009, 9:02
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(++Norton++ @ 5.3.2009, 0:34) *
скачивал, только не получилось его в QtDesigner добавить
Цитата(Litkevich Yuriy @ 5.3.2009, 8:16) *
про Qwt есть отдельная тема, почитай там было обсуждение проблем со сборкой.


вот
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 5.3.2009, 9:45
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Я тоже свой виджет для построения графиков делал :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 5.3.2009, 11:52
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Первое. Желательно создать новый проект. Основной класс GraphicWidget, для простоты, лучше унаследовать от QWidget! Затем добавить в этот виджет еще один виджет graphWidget и сделать компоновку с помощью QGridLayout!
Далее, следует добавить новые PlotSettings.cpp и PlotSettings.h файлы.
h-файл будет выглядеть так:
#ifndef PLOTSETTINGS_H
#define PLOTSETTINGS_H

#include <QPointF>
#include <cmath>

/// Абстрактный класс для задания диапазона значений по осям x и y
class PlotSettings
{
public:
    double minX;                        ///< минимальное значение по оси абсцисс
    double maxX;                        ///< максимальное значение по оси абсцисс
    int numXTicks;                        ///< количество делений на оси абсцисс
    double minY;                        ///< минимальное значение по оси ординат
    double maxY;                        ///< максимальное значение по оси ординат
    int numYTicks;                        ///< количество делений на оси ординат

protected:
    void adjustAxis(double& min, double& max, int& numTicks);

public:
    PlotSettings();
    void scroll(double dx, double dy);
    void scale(double delta_x, double delta_y);
    void adjust();
    void adjust(QPointF& point);
    double spanX() const { return fabs(maxX - minX); }
    double spanY() const { return fabs(maxY - minY); }
};

#endif



В чем-то создание этого виджета будет пересекаться с книгой Жасмина и Бланшета по Qt4! Но будут и отличия.
Итак, создали класс, который будет отвечать за масштабирование, перемещение и сетку нашего графика.


source
PlotSettings::PlotSettings(): minX(-50.), minY(-4.), maxX(50.), maxY(45.)
{
    numXTicks = 8;
    numYTicks = 8;
}

/// Увеличение/уменьшение значения minX, maxX, minY, maxY на интервал между 2-мя отметками
void PlotSettings::scroll(double dx, double dy)
{
    double stepX = spanX() / numXTicks;
    minX += dx * stepX;
    maxX += dx * stepX;

    double stepY = spanY() / numYTicks;
    minY += dy * stepY;
    maxY += dy * stepY;

    adjust();
}

/// Увеличение/уменьшение значения minX, maxX, minY, maxY на интервал между 2-мя отметками
void PlotSettings::scale(double delta_x, double delta_y)
{
    if((minX == maxX || minY == maxY) && delta_x < 0 && delta_y < 0) return;

    double stepX = spanX() / numXTicks;
    minX -= delta_x * stepX;
    maxX += delta_x * stepX;

    double stepY = spanY() / numYTicks;
    minY -= delta_y * stepY;
    maxY += delta_y * stepY;
}

/// Округление значений minX, minY, maxX, maxY
void PlotSettings::adjust()
{
    adjustAxis(minX, maxX, numXTicks);
    adjustAxis(minY, maxY, numYTicks);
}

/// Округление значений заданной точки point
void PlotSettings::adjust(QPointF& point)
{
    double mn_x = minX, mn_y = minY;
    int ticks_x = numXTicks, ticks_y = numYTicks;
    double mx_x = point.x(), mx_y = point.y();

    adjustAxis(mn_x, mx_x, ticks_x);
    adjustAxis(mn_y, mx_y, ticks_y);

    point.setX(mx_x);
    point.setY(mx_y);
}

/// Преобразование параметров в удобные значения
void PlotSettings::adjustAxis(double& min, double&  max, int& numTicks)
{
    const int MinTicks = 5;
    double grossStep = (max - min) / MinTicks;
    double step = pow(10.0, floor(log10(grossStep)));

    if(5 * step < grossStep)
        step *= 5;
    else if(2 * step < grossStep)
        step *= 2;

    numTicks = int(ceil(max / step) - floor(min / step));        
    if(numTicks < MinTicks)
        numTicks = MinTicks;

    min = floor(min / step) * step;
    max = ceil(max / step) * step;
}


Сообщение отредактировал AD - 7.3.2009, 14:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

5 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.10.2019, 2:25