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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как изменять масштаб в qwt без помощи мыши?(ЧАСТИЧНО РЕШЕНО)  (Прочитано 3617 раз)
_KoT_
Гость
« : Июнь 17, 2010, 18:50 »

Нужно сделать приближение/отдаление всей сцены с помощью кнопок(элементов интерфейса). Пропорции должны сохранятся. При старте проги надо сразу несколько увеличить масштаб.
В примерах всё через выделение мышью(
Подключил к плоту объект класса QwtPlotZoomer. Пробовал передавать в zoom число, ничего не изменилось. Передача QRectF изменяет масштаб, но встаёт вопрос о сохранении пропорций. Можно конечно брать размеры плота и пропорционально задавать QRectF, но что то это пахнет изобретением велосипеда.
Подскажите, как это проще сделать?

з.ы Проблема похоже в невкуриваемости манов на буржуйском языке.( Поиск в них и на форуме не дал результатов (всё те же примеры с мышью). Гугл приводит на форум.
« Последнее редактирование: Июнь 21, 2010, 15:03 от _KoT_ » Записан
_KoT_
Гость
« Ответ #1 : Июнь 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)));
}

Вот только мне кажется, что такое простое действие, как изменение масштаба должно делаться проще.
Может кто подскажет как.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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