crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> кто-то работал с qcustomplot ?
_Vitaliy_
  опции профиля:
сообщение 27.8.2014, 19:05
Сообщение #1


Студент
*

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

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




Репутация:   0  


Если да, то откликнитесь, есть несколько вопросов...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 28.8.2014, 9:23
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Да, приходилось немного...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 28.8.2014, 11:13
Сообщение #3


Студент
*

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

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




Репутация:   0  


Цитата(Steklova Olga @ 28.8.2014, 8:23) *
Да, приходилось немного...

Это замечательно.
Есть несколько графиков (порядка 10) на "плоскости", необходимо реализовать возможность выбора каждого отдельного графика. Сделано через:
 ui->customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);

Реализовать ограничение перемещения по оси OX. Сделано через:
ui->customPlot->axisRect()->setRangeDrag(Qt::Vertical);

Необходимо реализовать:
1. Возможность перемещения произвольного графика по оси OY (остальные графики неподвижны).
2. Первоначально, при отображении графиков, значения на оси OY отсутствуют, при выборе графика, появляется его ось OY со значениями в масштабе выбранного графика.
При снятии выделения графика, значения по оси OY пропадают.
Для пояснения прикладываю изображение (в аттаче).

Сообщение отредактировал _Vitaliy_ - 28.8.2014, 11:14
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 28.8.2014, 20:08
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


При перемещении произвольного графика по оси OY значения оцифровки этого графика не должны меняться?
То есть, если у этого графика были значения в диапазоне 100...400, то при перемещении этого графика вверх или вниз этот диапазон сохраняется на оцифровке?

А это не забыл?
ui->customPlot->axisRect()->setRangeZoom(Qt::Vertical);

Мне не приходилось решать такую задачу.
Может лучше поискать ответ на родном форуме qcustomplot? Смотри тут

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 28.8.2014, 20:31
Сообщение #5


Студент
*

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

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




Репутация:   0  


Начинаем с простого...
Необходимо реализовать:
1. Возможность перемещения произвольного графика по оси OY (остальные графики неподвижны).
Давайте сначала попробуем "победить" 1-й пункт.
Цитата
То есть, если у этого графика были значения в диапазоне 100...400, то при перемещении этого графика вверх или вниз этот диапазон сохраняется на оцифровке?

да, диапазон должен быть сохранен.
Цитата
Может лучше поискать ответ на родном форуме qcustomplot?
был я там, но до конца тема (моя) не раскрыта (т.е. попробуйте вот-так или так и т.д. но рабочего куска кода я не нашел)...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 29.8.2014, 11:04
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


А как ты рисуешь несколько графиков на одном customPlot? Так?
QCPCurve *gr1 = new QCPCurve(customPlot->xAxis, customPlot->yAxis);
QCPCurve *gr2 = new QCPCurve(customPlot->xAxis, customPlot->yAxis);
customPlot->addPlottable(gr1);
customPlot->addPlottable(gr2);

Если у одного графика значения в диапазоне 100...400 и у другого графика значения в диапазоне 100...400, а рисуешь ты их друг на другом, то по оси OY на самом деле у них разная оцифровка, не так ли? Например, у первого 0+100...0+400, у второго 500+100...500+400.

Цитата(_Vitaliy_ @ 28.8.2014, 20:31) *
попробуйте вот-так или так и т.д. но рабочего куска кода я не нашел
вот и пробуй
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 29.8.2014, 11:45
Сообщение #7


Студент
*

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

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




Репутация:   0  


Рисую стандартно:
    ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);
    ui->customPlot->graph(0)->setPen(QPen(Qt::green));
    ui->customPlot->graph(0)->setLineStyle(QCPGraph::lsLine);
    ui->customPlot->graph(0)->setName("first graph");

    ui->customPlot->addGraph(ui->customPlot->xAxis2, ui->customPlot->yAxis2);
    ui->customPlot->graph(1)->setPen(QPen(Qt::red));
    ui->customPlot->graph(1)->setLineStyle(QCPGraph::lsLine);
    ui->customPlot->graph(1)->setName("second graph");

    // generate data, just playing with numbers, not much to learn here:
    QVector<double> x(250), y1(250), y2(250);
    for (int i=0; i<250; ++i)
    {
        x[i] = i;
        y1[i] = sin(x[i]/10);
        y2[i] = cos(x[i]/7) + 2;
    }

    // pass data points to graphs:
    ui->customPlot->graph(0)->setData(x, y1);
    ui->customPlot->graph(1)->setData(x, y2);

    // activate top and right axes, which are invisible by default:
    ui->customPlot->xAxis->setVisible(true);
    ui->customPlot->yAxis->setVisible(true);
    ui->customPlot->xAxis2->setVisible(true);
    ui->customPlot->yAxis2->setVisible(true);

    ui->customPlot->graph(0)->rescaleAxes(true);
    ui->customPlot->graph(1)->rescaleAxes(true);
    ui->customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);

    ui->customPlot->axisRect()->setRangeDrag(Qt::Vertical);
    ui->customPlot->axisRect()->setRangeZoom(Qt::Vertical);
    ui->customPlot->replot();

З.Ы. Попробую как Вы предложили...

Попробовал как Вы предложили, эффект тот-же.
Получается что какой график идет первым, тот и является "основным", потому что при выборе второго графика все-равно перемещается первый...
Наверное нужно каким-то образом при выборе второго графика сделать его основным, но я пока это к сожалению не победил...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 29.8.2014, 12:16
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Цитата(_Vitaliy_ @ 28.8.2014, 20:31) *
Цитата
То есть, если у этого графика были значения в диапазоне 100...400, то при перемещении этого графика вверх или вниз этот диапазон сохраняется на оцифровке?

да, диапазон должен быть сохранен.

Смотрю на твои картинки. У синего графика оцифровка -150...-50. Над ним красный с диапазоном 100...300.
Если ты переместишь синий график выше красного, то у синего все равно должна остаться оцифровка -150...-50?

Ты зачем-то указываешь для первого графика customPlot->xAxis, customPlot->yAxis, для второго customPlot->xAxis2, customPlot->yAxis2. Но на картинке у тебя больше двух графиков. (xAxis, yAxis) - это оцифровка слева, (xAxis2, yAxis2) - справа. Судя по картинке, тебе надо, чтобы у всех графиков была оцифровка слева.


Сообщение отредактировал Steklova Olga - 29.8.2014, 12:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 29.8.2014, 13:15
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Цитата(_Vitaliy_ @ 29.8.2014, 11:45) *
Получается что какой график идет первым, тот и является "основным", потому что при выборе второго графика все-равно перемещается первый...

Ты не прав. Это у тебя не первый график перемещается. У первого графика значения точек-то не изменяются, они сохраняются, график как-бы нарисован на области customPlot'а.
А прокручивается сама область customPlot'а с теми графиками, у которых указано customPlot->xAxis, customPlot->yAxis. Если ты для нескольких графиков укажешь customPlot->xAxis, customPlot->yAxis, то область customPlot'а будет прокручиваться со всеми этими графиками.

А вот если тебе надо, чтобы график именно двигался относительно области customPlot'а, то это совсем другое дело.


Вместо
customPlot->graph(0)->rescaleAxes(true);
customPlot->graph(1)->rescaleAxes(true);
надо писать так:
  // let the ranges scale themselves so graph 0 fits perfectly in the visible area:
  customPlot->graph(0)->rescaleAxes();
  // same thing for graph 1, but only enlarge ranges (in case graph 1 is smaller than graph 0):
  customPlot->graph(1)->rescaleAxes(true);

  // Note: we could have also just called customPlot->rescaleAxes(); instead


Сообщение отредактировал Steklova Olga - 29.8.2014, 13:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 29.8.2014, 13:39
Сообщение #10


Студент
*

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

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




Репутация:   0  


Цитата
А прокручивается сама область customPlot'а с теми графиками, у которых указано customPlot->xAxis, customPlot->yAxis. Если ты для нескольких графиков укажешь customPlot->xAxis, customPlot->yAxis, то область customPlot'а будет прокручиваться со всеми этими графиками.

Я с Вами абсолютно согласен, но мне нужно чтобы эти графики двигались по оси ОУ независимо.

Т.е. при первом отображении формы все графики должны быть "завязаны" в конструкторе на оси xAxis и yAxis и мы можем масштабировать все графики синхронно.

При выборе графика №1, график №2 нужно переназначить на оси xAxis2 и yAxis2 и наоборот при выборе график №2 переназначить на xAxis и yAxis, а график №1 на xAxis2 и yAxis2 чтобы №1 был неподвижен а №2 можно было перемещать или я заблуждаюсь?

Сообщение отредактировал _Vitaliy_ - 29.8.2014, 13:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 1.12.2024, 8:57