Russian Qt Forum
Май 15, 2024, 23:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qwt масштабирование QwtPlot  (Прочитано 9087 раз)
cbp
Гость
« : Май 20, 2009, 20:30 »

Знаете хорошую программку Audacity? Там есть масштабирование скроллом по оси Х при зажатой клавише Ctrl. Хочется так же сделать в Qwt! Подскажите пожалуйста!
Записан
Varan
Гость
« Ответ #1 : Май 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()).
« Последнее редактирование: Май 21, 2009, 15:58 от Varan » Записан
cbp
Гость
« Ответ #2 : Май 21, 2009, 22:15 »

Ok Спасибо. Попробую!
Записан
cbp
Гость
« Ответ #3 : Май 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();
}
Записан
Varan
Гость
« Ответ #4 : Июнь 11, 2009, 14:54 »

А что именно не получается?
Учитывая, что в connect стоит scrollLeftAxis(double), а сама функция scrollXAxis(double value) - в общем, неудивительно.
Записан
sa_mel
Гость
« Ответ #5 : Июль 18, 2011, 23:27 »

Интерфейс масштабирования графика QwtPlot, в том числе и вращением колеса мыши при нажатой клавише Ctrl, освещается в статье по адресу http://qtlinux.narod.ru/qwtchartzoom.htm.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.174 секунд. Запросов: 20.