crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Масштабирование с помощью колесика мышки, ?
AD
  опции профиля:
сообщение 28.5.2008, 10:43
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


На данный момент масштабирование графика реализовано также, как и в книжке Саммерфилда и Бланшета. Смысл метода заключается в том, что сохраняется предыдущий масштаб и идет при прокрутке колесика мышки на него. Меня не устраивает такая интерпретация изменения масштаба, хочется сделать обычную!. То есть, чтобы масштаб изменялся гладко и правильно.
Помогите, пожалуйста! Подскажите, пожалуйста, методы решения данной проблемы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 4.6.2008, 10:58
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а в приведенном тобой коде вообще нет нистрочки о применении переменной curZoom, и запоминании масштаба, давай больше кода, где ты сам масштаб-то изменяешь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.6.2008, 15:51
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 4.6.2008, 11:58) *
а в приведенном тобой коде вообще нет нистрочки о применении переменной curZoom, и запоминании масштаба, давай больше кода, где ты сам масштаб-то изменяешь

Вот код
/// Нажатие на кнопку - рисование "резиновой ленты"
void GraphicDisplay::mousePressEvent(QMouseEvent* events)
{
    QWidget::mousePressEvent(events);

    QRect r;
    switch(events -> button())
    {
    case Qt::LeftButton:                ///< если нажата левая кнопка мыши
        origin = events -> pos();
        rubberBandIsShown = true;
        setCursor(Qt::CrossCursor);
        r = QRect(origin, QSize());
        rubber -> setGeometry(r);
        rubber -> show();
    break;
    case Qt::RightButton:                ///< если нажата правая кнопка мыши
    break;
    default:
    break;
    }
}

/// Переопределение функции передвижения мыши
void GraphicDisplay::mouseMoveEvent(QMouseEvent* events)
{
    if(rubberBandIsShown)
    {
        rubber -> setWindowOpacity(0.0);
        rubber -> setGeometry(QRect(origin, events -> pos()).normalized());
    }

    update();
}

/// Возвращение прежнего вида курсору и изменение масштаба
void GraphicDisplay::mouseReleaseEvent(QMouseEvent* events)
{
    if(events -> button() == Qt::LeftButton && rubberBandIsShown)
    {
        rubberBandIsShown = false;
        unsetCursor();
        
        QRect rect = rubber -> geometry().normalized();
        if(rect.width() < 10 || rect.height() < 10) return;
        ParamPlotSettings prevSettings = zoomStack[curZoom];
        ParamPlotSettings settings;
        double dx = prevSettings.spanX() / (width() - 2 * MARGIN);
        double dy = prevSettings.spanY() / (height() - 2 * MARGIN);
        settings.minX = prevSettings.minX + dx * rect.left();
        settings.maxX = prevSettings.minX + dx * rect.right();
        settings.minY = prevSettings.maxY - dy * rect.bottom();
        settings.maxY = prevSettings.maxY - dy * rect.top();
        settings.win_type = prevSettings.win_type;
        settings.adjust();

        zoomStack.resize(curZoom + 1);
        zoomStack.append(settings);
        rubber -> hide();
        zoomIn();
    }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 9.6.2008, 10:13
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Так что других алгоритмов нет? Кто-то может помочь, пожалуйста?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AD   Масштабирование с помощью колесика мышки   28.5.2008, 10:43
- - ViGOur   Цитата(AD @ 28.5.2008, 11:43) Меня не уст...   28.5.2008, 15:04
|- - AD   Цитата(ViGOur @ 28.5.2008, 16:04) Не совс...   28.5.2008, 15:32
- - Litkevich Yuriy   А в чем трудность, алгоритм вроде не сложный получ...   28.5.2008, 15:48
|- - AD   Цитата(Litkevich Yuriy @ 28.5.2008, 16:48...   29.5.2008, 14:25
- - Litkevich Yuriy   я бы так доработал: void GraphicDisplay::z...   29.5.2008, 15:39
|- - AD   Цитата(Litkevich Yuriy @ 29.5.2008, 16:39...   4.6.2008, 10:31
- - Litkevich Yuriy   Цитата(AD @ 4.6.2008, 14:31) Не понял отл...   4.6.2008, 10:37
|- - AD   Цитата(Litkevich Yuriy @ 4.6.2008, 11:37)...   4.6.2008, 10:50
- - Litkevich Yuriy   а в приведенном тобой коде вообще нет нистрочки о ...   4.6.2008, 10:58
|- - AD   Цитата(Litkevich Yuriy @ 4.6.2008, 11:58)...   4.6.2008, 15:51
|- - AD   Так что других алгоритмов нет? Кто-то может помочь...   9.6.2008, 10:13
- - Red Devil   Ну почему же нет. Берешь размеры изображения (шири...   9.6.2008, 11:07
|- - AD   Я дозрел до правильной формулировки задачи. Мне...   10.6.2008, 17:21
|- - AD   О_о кое какое просветление вот код, выполняющий ...   10.6.2008, 18:23
|- - AD   Блин совсем мозги плавятся от правильного определе...   17.6.2008, 11:09
- - ViGOur   Ты на бумаге попробуй все разрисуй, это помогает, ...   17.6.2008, 11:10
|- - AD   Можно задавать маленькие конкретные вопросы? Возмо...   18.6.2008, 10:12
|- - AD   Это опять я. Короче, проблема пока еще не решена. ...   30.6.2008, 10:22
- - Red Devil   Нарисуй все на бумаге, напиши формулы, выложи их з...   30.6.2008, 11:16
|- - AD   Вот так вот Искал пример использования двоичных ф...   9.7.2008, 15:40
|- - AD   Век живи, век учись! Вот так выглядит код, кот...   11.7.2008, 11:50
- - ViGOur   Молодец, осилил наконец. Упрямства тебе не заним...   11.7.2008, 11:54
|- - AD   Цитата(ViGOur @ 11.7.2008, 12:54) Молодец...   11.7.2008, 12:04
- - ViGOur   Цитата(AD @ 11.7.2008, 13:04) Может упорс...   11.7.2008, 13:06


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


9 чел. читают эту тему (гостей: 9, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 18:49