Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: foufou от Январь 18, 2011, 21:54



Название: Как получить пределы (min и max), в которых построены оси у объекта QwtPlot ?
Отправлено: foufou от Январь 18, 2011, 21:54
Нужно мне при помощи QwtPlot рисовать графики, но на "квадратной" координатной сетке, т.е. на такой сетке, у которой присутствуют не только левая ось Y и нижняя X, но и правая ось Y вместе с верхней осью X. Важно, чтобы пределы, в которых нарисована правая ось Y совпадали с пределами левой оси Y. Допустим, левая ось Y построена в пределах от 18.1 до 20.1 с шагом 0.2. В этом случае правая ось Y тоже должна быть построена в этих же пределах. Аналогично с осями X - верхняя ось должна повторять нижнюю.

Как задать пределы вроде понятно - при помощи setAxisScale. Например, вот так:
qwtPlot->setAxisScale(QwtPlot::xTop,minX,maxX);

Однако не получается считать текущие пределы оси. Подскажите пожалуйста, кто имеет опыт работы с qwt, как это можно сделать ?

Пытаюсь делать вот так:

QwtScaleWidget *qwtScB = qwtPlot->axisWidget(QwtPlot::xBottom);
QwtScaleDraw *scdwB = qwtScB->scaleDraw();

int minX = scdwB->scaleDiv().lowerBound();
int maxX = scdwB->scaleDiv().upperBound();

qwtPlot->setAxisScale(QwtPlot::xTop,minX,maxX);

Вроде работает, но как-то криво. Например, когда делаю зум несколько раз, заметно, что парные оси начинают не совпадать.
Также работает это как-то нестабильно. Замечал, что на некоторых наборах вообще получается ерунда.


Название: Re: Как получить пределы (min и max), в которых построены оси у объекта QwtPlot ?
Отправлено: Racheengel от Февраль 20, 2011, 13:23
попробуй после изменения данных и до твоего кода вызывать updateAxisScales() (по моему так), должно помочь.


Название: Re: Как получить пределы (min и max), в которых построены оси у объекта QwtPlot ?
Отправлено: Dimas от Апрель 09, 2012, 10:00
По поводу получения текущих пределов осей. Сам столкнулся недавно. Тема старая, но для следующих поколений вот решение:

Код:
    
    // исходные границы графика по оси y
    double isb_yb,isb_yt;
    // получаем карту шкалы оси y на канве
    QwtScaleMap sm = m_ui.myPlot->canvasMap(QwtPlot::yLeft);
    isb_yb = sm.s1();
    isb_yt = sm.s2();