crossplatform.ru

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

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> кто-то работал с qcustomplot ?
Steklova Olga
  опции профиля:
сообщение 29.8.2014, 14:06
Сообщение #11


Участник
**

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

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




Репутация:   4  


ты не ответил на сообщение #8
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 29.8.2014, 17:34
Сообщение #12


Участник
**

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

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




Репутация:   4  


graphics()
void MainWindow::graphics()
{
    ui->customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
    ui->customPlot->axisRect()->setRangeDrag(Qt::Vertical);
    ui->customPlot->axisRect()->setRangeZoom(Qt::Vertical);

    ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);
    ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);
    ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);

    ui->customPlot->graph(0)->setLineStyle(QCPGraph::lsLine);
    ui->customPlot->graph(1)->setLineStyle(QCPGraph::lsLine);
    ui->customPlot->graph(2)->setLineStyle(QCPGraph::lsLine);

    ui->customPlot->graph(0)->setPen(QPen(Qt::red, 5));
    ui->customPlot->graph(1)->setPen(QPen(Qt::yellow, 5));
    ui->customPlot->graph(2)->setPen(QPen(Qt::green, 5));

    ui->customPlot->xAxis->setVisible(true);
    ui->customPlot->yAxis->setVisible(true);
    ui->customPlot->xAxis2->setVisible(true);
    ui->customPlot->yAxis2->setVisible(true);

    ui->customPlot->xAxis->setBasePen(QPen(Qt::black));
    ui->customPlot->yAxis->setBasePen(QPen(Qt::black));
    ui->customPlot->xAxis2->setBasePen(QPen(Qt::black));
    ui->customPlot->yAxis2->setBasePen(QPen(Qt::black));

    QVector<double> x(250), y1(250), y2(250), y3(250);
    for (int i=0; i<250; ++i)
    {
        x[i] = i;
        y1[i] = sin(x[i]/10);
        y2[i] = sin(x[i]/10) + 1.0;
        y3[i] = cos(x[i]/10) + 2.0;
    }

    connect(ui->customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->xAxis2, SLOT(setRange(QCPRange)));
    connect(ui->customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->yAxis2, SLOT(setRange(QCPRange)));

    ui->customPlot->graph(0)->setData(x, y1);
    ui->customPlot->graph(1)->setData(x, y2);
    ui->customPlot->graph(2)->setData(x, y3);

    ui->customPlot->rescaleAxes();

    ui->customPlot->replot();
}
on_btn_green_check_clicked()
void MainWindow::on_btn_green_check_clicked()
{
    disconnect(ui->customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->xAxis2, SLOT(setRange(QCPRange)));
    disconnect(ui->customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->yAxis2, SLOT(setRange(QCPRange)));

    //все графики кроме зеленого переключаем на 2-ю неподвижную оцифровку
    ui->customPlot->graph(0)->setKeyAxis(ui->customPlot->xAxis2);
    ui->customPlot->graph(0)->setValueAxis(ui->customPlot->yAxis2);
    ui->customPlot->graph(1)->setKeyAxis(ui->customPlot->xAxis2);
    ui->customPlot->graph(1)->setValueAxis(ui->customPlot->yAxis2);

    ui->customPlot->xAxis->setBasePen(QPen(Qt::green, 2));
    ui->customPlot->yAxis->setBasePen(QPen(Qt::green, 2));

    ui->customPlot->replot();
}
on_btn_green_uncheck_clicked()
void MainWindow::on_btn_green_uncheck_clicked()
{
    ui->customPlot->yAxis->setRange(ui->customPlot->yAxis2->range()); //можно это не делать (или делать, если нужно)

    connect(ui->customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->xAxis2, SLOT(setRange(QCPRange)));
    connect(ui->customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->yAxis2, SLOT(setRange(QCPRange)));

    //все графики кроме зеленого возвращаем на 1-ю подвижную оцифровку
    ui->customPlot->graph(0)->setKeyAxis(ui->customPlot->xAxis);
    ui->customPlot->graph(0)->setValueAxis(ui->customPlot->yAxis);
    ui->customPlot->graph(1)->setKeyAxis(ui->customPlot->xAxis);
    ui->customPlot->graph(1)->setValueAxis(ui->customPlot->yAxis);

    ui->customPlot->xAxis->setBasePen(QPen(Qt::black));
    ui->customPlot->yAxis->setBasePen(QPen(Qt::black));

    ui->customPlot->replot();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 29.8.2014, 18:05
Сообщение #13


Участник
**

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

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




Репутация:   4  


а для оцифровки
on_btn_green_check_clicked()
void MainWindow::on_btn_green_check_clicked()
{
    disconnect(ui->customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->xAxis2, SLOT(setRange(QCPRange)));
    disconnect(ui->customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->yAxis2, SLOT(setRange(QCPRange)));

    //все графики кроме зеленого переключаем на 2-ю неподвижную оцифровку
    ui->customPlot->graph(0)->setKeyAxis(ui->customPlot->xAxis2);
    ui->customPlot->graph(0)->setValueAxis(ui->customPlot->yAxis2);
    ui->customPlot->graph(1)->setKeyAxis(ui->customPlot->xAxis2);
    ui->customPlot->graph(1)->setValueAxis(ui->customPlot->yAxis2);

    ui->customPlot->xAxis->setBasePen(QPen(Qt::green, 2));
    ui->customPlot->yAxis->setBasePen(QPen(Qt::green, 2));

    //dop
//    ui->customPlot->yAxis->setVisible(true);
    ui->customPlot->yAxis->setAutoTicks(false);
    ui->customPlot->yAxis->setAutoTickLabels(false);
    ui->customPlot->yAxis->setAutoSubTicks(false);
    ui->customPlot->yAxis->setTickVector(QVector<double>()
        << 1.0 << 2.0 << 3.0);
    ui->customPlot->yAxis->setTickVectorLabels(QVector<QString>()
        << "1,0" << "2,0" << "3,0");
    //dop

    ui->customPlot->replot();
}
on_btn_green_uncheck_clicked()
void MainWindow::on_btn_green_uncheck_clicked()
{
    ui->customPlot->yAxis->setRange(ui->customPlot->yAxis2->range()); //можно это не делать (или делать, если нужно)

    connect(ui->customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->xAxis2, SLOT(setRange(QCPRange)));
    connect(ui->customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->yAxis2, SLOT(setRange(QCPRange)));

    //все графики кроме зеленого возвращаем на 1-ю подвижную оцифровку
    ui->customPlot->graph(0)->setKeyAxis(ui->customPlot->xAxis);
    ui->customPlot->graph(0)->setValueAxis(ui->customPlot->yAxis);
    ui->customPlot->graph(1)->setKeyAxis(ui->customPlot->xAxis);
    ui->customPlot->graph(1)->setValueAxis(ui->customPlot->yAxis);

    ui->customPlot->xAxis->setBasePen(QPen(Qt::black));
    ui->customPlot->yAxis->setBasePen(QPen(Qt::black));

    //dop
//    ui->customPlot->yAxis->setVisible(false);
    ui->customPlot->yAxis->setAutoTicks(true);
    ui->customPlot->yAxis->setAutoTickLabels(true);
    ui->customPlot->yAxis->setAutoSubTicks(true);
    //dop

    ui->customPlot->replot();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 29.8.2014, 20:14
Сообщение #14


Студент
*

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

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




Репутация:   0  


Отвечаю на 8 пост.
Цитата
Если ты переместишь синий график выше красного, то у синего все равно должна остаться оцифровка -150...-50?

Да, т.е. синхронно для всех графиков должен работать только "ресайз" по оси ОХ. По оси ОУ для каждого отдельного графика, т.е. выбрали график №N, отмасштабировали (при необходимости), передвинули (при необходимости) масштаб и местоположение этого графика остается неизменным до следующего его выбора.
Цитата
Ты зачем-то указываешь для первого графика customPlot->xAxis, customPlot->yAxis, для второго customPlot->xAxis2, customPlot->yAxis2. Но на картинке у тебя больше двух графиков. (xAxis, yAxis) - это оцифровка слева, (xAxis2, yAxis2) - справа.

про xAxis, yAxis, xAxis2, yAxis2 и их расположение мы в курсе.
Цитата
Судя по картинке, тебе надо, чтобы у всех графиков была оцифровка слева.

При первоначальном открытии окна с графиками видна только ось ОХ и все, при выборе произвольного графика подсвечивается ось OY выбранного графика, и масштаб оси ОУ этого графика соответствует размаху по ОУ этого графика.

на 12-13 пост, сейчас попробую поколдовать, сегодня-завтра отпишусь, но все равно спасибо за соучастие.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 30.8.2014, 8:23
Сообщение #15


Студент
*

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

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




Репутация:   0  


Доброго времени суток.
Посмотрел Ваши решения, немного недопонял насчет использования
on_btn_green_check_clicked()
кнопок вроде как нет.
На всякий случай прикладываю свою реализацию через
 connect(ui->customPlot, SIGNAL(plottableClick(QCPAbstractPlottable*,QMouseEvent*)),
            this, SLOT(graphClicked(QCPAbstractPlottable*)));

З.ы. хотел 7Z архивом скинуть но что-то система не пропускает, тогда портянка mainwindow.cpp:

Раскрывающийся текст
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    graphics();

    connect(ui->customPlot, SIGNAL(plottableClick(QCPAbstractPlottable*,QMouseEvent*)),
            this, SLOT(graphClicked(QCPAbstractPlottable*)));

}


void MainWindow::graphics()
{
    ui->customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
    ui->customPlot->axisRect()->setRangeDrag(Qt::Vertical);   // peremeshenie po OY
    ui->customPlot->axisRect()->setRangeZoom(Qt::Vertical);   // mashtab po OX

    ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);
    ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);
    ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);

    ui->customPlot->graph(0)->setLineStyle(QCPGraph::lsLine);
    ui->customPlot->graph(1)->setLineStyle(QCPGraph::lsLine);
    ui->customPlot->graph(2)->setLineStyle(QCPGraph::lsLine);

    ui->customPlot->graph(0)->setPen(QPen(Qt::red, 3));
    ui->customPlot->graph(1)->setPen(QPen(Qt::yellow, 3));
    ui->customPlot->graph(2)->setPen(QPen(Qt::green, 3));

    ui->customPlot->xAxis->setVisible(true);
    ui->customPlot->yAxis->setVisible(false);
    ui->customPlot->xAxis2->setVisible(false);
    ui->customPlot->yAxis2->setVisible(false);

    ui->customPlot->xAxis->setBasePen(QPen(Qt::black));
    ui->customPlot->yAxis->setBasePen(QPen(Qt::black));
    ui->customPlot->xAxis2->setBasePen(QPen(Qt::black));
    ui->customPlot->yAxis2->setBasePen(QPen(Qt::black));

    QVector<double> x(250), y1(250), y2(250), y3(250);
    for (int i=0; i<250; ++i)
    {
        x[i] = i;
        y1[i] = sin(x[i]/10);
        y2[i] = sin(x[i]/7) + 1.0;
        y3[i] = cos(x[i]/5) + 2.0;
    }

//    connect(ui->customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->xAxis2, SLOT(setRange(QCPRange)));
//    connect(ui->customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)), ui->customPlot->yAxis2, SLOT(setRange(QCPRange)));

    ui->customPlot->graph(0)->setData(x, y1);
    ui->customPlot->graph(1)->setData(x, y2);
    ui->customPlot->graph(2)->setData(x, y3);

    ui->customPlot->graph(0)->setName("graph 0");
    ui->customPlot->graph(1)->setName("graph 1");
    ui->customPlot->graph(2)->setName("graph 2");

    ui->customPlot->rescaleAxes();

    ui->customPlot->replot();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::graphClicked(QCPAbstractPlottable *plottable)
{
  ui->statusBar->showMessage(QString("Clicked on graph '%1'.").arg(plottable->name()), 1000);

  qDebug() << plottable->name();


  if (plottable->name() == "graph 0")
  {
      ui->customPlot->yAxis->setVisible(true);

      ui->customPlot->graph(0)->setKeyAxis(ui->customPlot->xAxis);
      ui->customPlot->graph(0)->setValueAxis(ui->customPlot->yAxis);

      ui->customPlot->graph(1)->setKeyAxis(ui->customPlot->xAxis2);
      ui->customPlot->graph(1)->setValueAxis(ui->customPlot->yAxis2);
      ui->customPlot->graph(2)->setKeyAxis(ui->customPlot->xAxis2);
      ui->customPlot->graph(2)->setValueAxis(ui->customPlot->yAxis2);


      ui->customPlot->yAxis->setAutoTicks(false);
      ui->customPlot->yAxis->setAutoTickLabels(false);
      ui->customPlot->yAxis->setAutoSubTicks(false);
      ui->customPlot->yAxis->setTickVector(QVector<double>()
                                           << 1.0 << 2.0 << 3.0);
      ui->customPlot->yAxis->setTickVectorLabels(QVector<QString>()
                                                 << "1,0" << "2,0" << "3,0");

      ui->customPlot->rescaleAxes();
      ui->customPlot->replot();
  }

  if (plottable->name() == "graph 1")
  {
      ui->customPlot->graph(1)->setKeyAxis(ui->customPlot->xAxis);
      ui->customPlot->graph(1)->setValueAxis(ui->customPlot->yAxis);

      ui->customPlot->graph(0)->setKeyAxis(ui->customPlot->xAxis2);
      ui->customPlot->graph(0)->setValueAxis(ui->customPlot->yAxis2);
      ui->customPlot->graph(2)->setKeyAxis(ui->customPlot->xAxis2);
      ui->customPlot->graph(2)->setValueAxis(ui->customPlot->yAxis2);

  }


}


зипом получилось...

Сообщение отредактировал _Vitaliy_ - 30.8.2014, 8:37
Прикрепленные файлы
Прикрепленный файл  na_forum.zip ( 202,71 килобайт ) Кол-во скачиваний: 253
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 1.9.2014, 11:12
Сообщение #16


Участник
**

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

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




Репутация:   4  


Насчет моего кода... Кинь на свое окно рядом с компонентом customPlot две кнопки, к их сигналам clicked() привяжи слоты, текст которых я привела. Это для зеленого графика имитация сигналов "зеленый график выбран", "отмена выбора зеленого графика". Числа 1.0, 2.0, 3.0 относятся именно к зеленому графику, когда к нему привязана моя функция этого графика.
Запускаешь. Не выбирая графиков, можно подвинуть их все вместе или отмасштабировать их все вместе.
Нажимаешь первую кнопку, видишь оцифровку зеленого графика. Например, двигаешь его. В это время остальные графики стоят на месте.
Но когда ты после этого нажимаешь вторую кнопку (как-бы снимая выделение эеленого графика), то этот зеленый график КОНЕЧНО возвращается туда, где он был до нажатия кнопок, а не остается визуально на тех пикселах, куда ты его двигал.
Потому что, пикселы пикселами, а значения-то точек зеленого графика ты не изменил.
customPlot - как прозрачный лист, на котором нарисованы графики. А когда ты одни графики привязывешь к правой оцифровке, а другие - к левой, то получаются два прозрачных листа, один неподвижный, а другой подвижный, но в окне ты видишь их оба сразу.

На твоем месте я посмотрела бы доку по классам
QCPItemPosition, QCPItemAnchor, QCPAbstractPlottable,
enum PositionType { ptAbsolute        ///< Static positioning in pixels, starting from the top left corner of the viewport/widget.
                    ,ptViewportRatio  ///< Static positioning given by a fraction of the viewport size.
                    ,ptAxisRectRatio  ///< Static positioning given by a fraction of the axis rect size (see \ref setAxisRect).
                    ,ptPlotCoords     ///< Dynamic positioning at a plot coordinate defined by two axes (see \ref setAxes).
                  };
и все же задала вопрос на родном форуме qcustomplot. Успехов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 1.9.2014, 13:08
Сообщение #17


Студент
*

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

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




Репутация:   0  


пока не "победил" адекватное масштабирование... Вы в мой проект не заглядывали?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 1.9.2014, 14:15
Сообщение #18


Участник
**

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

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




Репутация:   4  


я смотрела "твой" проект - искуроченный тобою мой тестовый пример.
мне надоело повторять десять раз одно и то же, я уже все сказала.
запусти мой пример, но с кнопками - увидишь, что получается.
читай доку по классам. мне по работе они сейчас не нужны, я не буду в них разбираться, чтобы тебе пересказывать. точка.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 1.9.2014, 14:52
Сообщение #19


Студент
*

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

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




Репутация:   0  


спасибо, честно говоря 17 сообщение я написал не видя Вашего 16, в котором Вы подробно все расписали, а в 18 сообщении вы меня просто "порвали" ...
хорошего кода...

Сообщение отредактировал _Vitaliy_ - 1.9.2014, 15:31
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
skyer_
  опции профиля:
сообщение 14.10.2014, 21:27
Сообщение #20


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 2.3.2009
Пользователь №: 584

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




Репутация:   0  


Приветствую, нужен совет как нарисовать горизонтальные гистограммы на qcustomplot.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 25.11.2024, 0:22