Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: cbp от Май 20, 2009, 20:30



Название: Qwt масштабирование QwtPlot
Отправлено: cbp от Май 20, 2009, 20:30
Знаете хорошую программку Audacity? Там есть масштабирование скроллом по оси Х при зажатой клавише Ctrl. Хочется так же сделать в Qwt! Подскажите пожалуйста!


Название: Re: Qwt масштабирование QwtPlot
Отправлено: Varan от Май 21, 2009, 15:49
Я унаследовался от QwtPlotPicker и переопределил там вот это:
void widgetWheelEvent(QWheelEvent * event)
как-то вот так:
Код
C++ (Qt)
else if (event->modifiers() == Qt::ControlModifier)
{
int delta = event->delta();
// zoom
}
 
delta служит в данном случае для определения направления зума, т.к. ее знак зависит от направления вращения колеса.

Что же касается непосредственно zoom, лично я это делал изменением scaleDiv нужной шкалы (setAxisScale()).


Название: Re: Qwt масштабирование QwtPlot
Отправлено: cbp от Май 21, 2009, 22:15
Ok Спасибо. Попробую!


Название: Re: Qwt масштабирование QwtPlot
Отправлено: cbp от Май 22, 2009, 13:52
Не получается ничерта! Добавил QwtWheel - но не получается! В чём проблема?
Код
C++ (Qt)
class Plot: public QwtPlot
{
   Q_OBJECT
public:
Plot(QWidget *parent);
void showData(double *count, double *amplitudeQ, double *amplitudeC, int size);
QwtPlotCurve *crvQuadr; //сигнал квадратурного канала
QwtPlotCurve *crvCoph; //сигнал синфазного канала
 
public slots:
void setCanvasColor(const QColor &);
 
private slots:
void scrollXAxis(double value);
 
private:
QwtWheel *zoomWheel;
};

Код
C++ (Qt)
Plot::Plot(QWidget *parent): QwtPlot(parent)
{
             zoomWheel = new QwtWheel(canvas());
zoomWheel->setRange(-100, 100);
zoomWheel->setValue(0.0);
zoomWheel->setMass(0.2);
zoomWheel->setTotalAngle(4 * 360.0);
 
connect(zoomWheel, SIGNAL(valueChanged(double)), SLOT(scrollLeftAxis(double)));
canvas()->installEventFilter(this);
}
 
void Plot::scrollXAxis(double value)
{
   setAxisScale(QwtPlot::xBottom, 0.0, 101.0 - value);
   replot();
}


Название: Re: Qwt масштабирование QwtPlot
Отправлено: Varan от Июнь 11, 2009, 14:54
А что именно не получается?
Учитывая, что в connect стоит scrollLeftAxis(double), а сама функция scrollXAxis(double value) - в общем, неудивительно.


Название: Re: Qwt масштабирование QwtPlot
Отправлено: sa_mel от Июль 18, 2011, 23:27
Интерфейс масштабирования графика QwtPlot, в том числе и вращением колеса мыши при нажатой клавише Ctrl, освещается в статье по адресу http://qtlinux.narod.ru/qwtchartzoom.htm (http://qtlinux.narod.ru/qwtchartzoom.htm).