Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: _KoT_ от Июнь 17, 2010, 18:50



Название: Как изменять масштаб в qwt без помощи мыши?(ЧАСТИЧНО РЕШЕНО)
Отправлено: _KoT_ от Июнь 17, 2010, 18:50
Нужно сделать приближение/отдаление всей сцены с помощью кнопок(элементов интерфейса). Пропорции должны сохранятся. При старте проги надо сразу несколько увеличить масштаб.
В примерах всё через выделение мышью(
Подключил к плоту объект класса QwtPlotZoomer. Пробовал передавать в zoom число, ничего не изменилось. Передача QRectF изменяет масштаб, но встаёт вопрос о сохранении пропорций. Можно конечно брать размеры плота и пропорционально задавать QRectF, но что то это пахнет изобретением велосипеда.
Подскажите, как это проще сделать?

з.ы Проблема похоже в невкуриваемости манов на буржуйском языке.( Поиск в них и на форуме не дал результатов (всё те же примеры с мышью). Гугл приводит на форум.


Название: Re: Как изменять масштаб в qwt без помощи мыши?
Отправлено: _KoT_ от Июнь 21, 2010, 15:02
Изобрёл велосипед  :( :
Код:
void MapoPorFunkcioImpl::setScale(qreal factor){
double q = (double)(qwtPlt->canvas()->paintCache()->size().height())/qwtPlt->canvas()->paintCache()->size().width();
skalo->zoom(QRectF(-5, 0, 100/factor, q*100/factor));// Предварительно увеличиваю масштаб.
}
Здесь skalo объект класса QwtPlotZoomer. Вызвать функцию надо после создания окна, т.е. не в конструкторе. Благо у меня конечный автомат. Добавил в инициализирующее состояние.

Приближение:
Код:
void MapoPorFunkcioImpl::on_PligrandigiBtn_clicked(){
skalo->zoom(QRectF(skalo->zoomRect().topLeft() + QPointF(1,1),
                   skalo->zoomRect().bottomRight() - QPointF(1,1)));
}

Отдаление:
Код:
void MapoPorFunkcioImpl::on_MalpliigiBtn_clicked(){
skalo->zoom(QRectF(skalo->zoomRect().topLeft() - QPointF(1,1),
                   skalo->zoomRect().bottomRight() + QPointF(1,1)));
}

Вот только мне кажется, что такое простое действие, как изменение масштаба должно делаться проще.
Может кто подскажет как.