Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: кто-то работал с qcustomplot ?
Форум на CrossPlatform.RU > Библиотеки > Другие библиотеки
_Vitaliy_
Если да, то откликнитесь, есть несколько вопросов...
Steklova Olga
Да, приходилось немного...
_Vitaliy_
Цитата(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 пропадают.
Для пояснения прикладываю изображение (в аттаче).
Steklova Olga
При перемещении произвольного графика по оси OY значения оцифровки этого графика не должны меняться?
То есть, если у этого графика были значения в диапазоне 100...400, то при перемещении этого графика вверх или вниз этот диапазон сохраняется на оцифровке?

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

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

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

да, диапазон должен быть сохранен.
Цитата
Может лучше поискать ответ на родном форуме qcustomplot?
был я там, но до конца тема (моя) не раскрыта (т.е. попробуйте вот-так или так и т.д. но рабочего куска кода я не нашел)...
Steklova Olga
А как ты рисуешь несколько графиков на одном 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_
Рисую стандартно:
    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
Цитата(_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
Цитата(_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
_Vitaliy_
Цитата
А прокручивается сама область customPlot'а с теми графиками, у которых указано customPlot->xAxis, customPlot->yAxis. Если ты для нескольких графиков укажешь customPlot->xAxis, customPlot->yAxis, то область customPlot'а будет прокручиваться со всеми этими графиками.

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

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

При выборе графика №1, график №2 нужно переназначить на оси xAxis2 и yAxis2 и наоборот при выборе график №2 переназначить на xAxis и yAxis, а график №1 на xAxis2 и yAxis2 чтобы №1 был неподвижен а №2 можно было перемещать или я заблуждаюсь?
Steklova Olga
ты не ответил на сообщение #8
Steklova Olga
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
а для оцифровки
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_
Отвечаю на 8 пост.
Цитата
Если ты переместишь синий график выше красного, то у синего все равно должна остаться оцифровка -150...-50?

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

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

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

на 12-13 пост, сейчас попробую поколдовать, сегодня-завтра отпишусь, но все равно спасибо за соучастие.
_Vitaliy_
Доброго времени суток.
Посмотрел Ваши решения, немного недопонял насчет использования
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);

  }


}


зипом получилось...
Steklova Olga
Насчет моего кода... Кинь на свое окно рядом с компонентом 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_
пока не "победил" адекватное масштабирование... Вы в мой проект не заглядывали?
Steklova Olga
я смотрела "твой" проект - искуроченный тобою мой тестовый пример.
мне надоело повторять десять раз одно и то же, я уже все сказала.
запусти мой пример, но с кнопками - увидишь, что получается.
читай доку по классам. мне по работе они сейчас не нужны, я не буду в них разбираться, чтобы тебе пересказывать. точка.
_Vitaliy_
спасибо, честно говоря 17 сообщение я написал не видя Вашего 16, в котором Вы подробно все расписали, а в 18 сообщении вы меня просто "порвали" ...
хорошего кода...
skyer_
Приветствую, нужен совет как нарисовать горизонтальные гистограммы на qcustomplot.
Steklova Olga
Цитата(skyer_ @ 14.10.2014, 21:27) *
Приветствую, нужен совет как нарисовать горизонтальные гистограммы на qcustomplot.

  QCPCurve *gr1 = new QCPCurve(customPlot->xAxis, customPlot->yAxis);
  QCPCurve *gr2 = new QCPCurve(customPlot->xAxis, customPlot->yAxis);
  customPlot->addPlottable(gr1);
  customPlot->addPlottable(gr2);
  gr1->setPen(QPen(Qt::darkGreen, 50, Qt::SolidLine));
  gr2->setPen(QPen(Qt::darkGreen, 50, Qt::SolidLine));
  int pointCount = 2;
  QVector<double> x(pointCount), y(pointCount);
  x[0] = 0.0; x[1] = 120.0;  y[0] = 20.0; y[1] = y[0];
  gr1->setData(x, y);
  x[0] = 0.0; x[1] = 150.0;  y[0] = 50.0; y[1] = y[0];
  gr2->setData(x, y);
  customPlot->axisRect()->setupFullAxesBox();
  customPlot->xAxis->setRange(0.0, 200.0);
  customPlot->yAxis->setRange(0.0, 100.0);
skyer_
Цитата(Steklova Olga @ 30.10.2014, 20:13) *
Цитата(skyer_ @ 14.10.2014, 21:27) *
Приветствую, нужен совет как нарисовать горизонтальные гистограммы на qcustomplot.

  QCPCurve *gr1 = new QCPCurve(customPlot->xAxis, customPlot->yAxis);
  QCPCurve *gr2 = new QCPCurve(customPlot->xAxis, customPlot->yAxis);
  customPlot->addPlottable(gr1);
  customPlot->addPlottable(gr2);
  gr1->setPen(QPen(Qt::darkGreen, 50, Qt::SolidLine));
  gr2->setPen(QPen(Qt::darkGreen, 50, Qt::SolidLine));
  int pointCount = 2;
  QVector<double> x(pointCount), y(pointCount);
  x[0] = 0.0; x[1] = 120.0;  y[0] = 20.0; y[1] = y[0];
  gr1->setData(x, y);
  x[0] = 0.0; x[1] = 150.0;  y[0] = 50.0; y[1] = y[0];
  gr2->setData(x, y);
  customPlot->axisRect()->setupFullAxesBox();
  customPlot->xAxis->setRange(0.0, 200.0);
  customPlot->yAxis->setRange(0.0, 100.0);



Благодарю, сейчас буду пробовать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.