crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QWheelEvent - прокрутка в обе стороны
warlock
  опции профиля:
сообщение 17.1.2010, 2:43
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.1.2010
Пользователь №: 1378

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




Репутация:   0  


У меня есть свойство класса. Я реализовал его инкрементирование при прокрутке колесика, но как реализовать его декрементирование, при прокрутке колесика мыши в обратную сторону?
На doc.trolltech.com подходящих методов не нашел.
На данный момент свойство увеличиваеться при прокрутке колеска как вперед, так и назад.

Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.1.2010, 7:04
Сообщение #2


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

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

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




Репутация:   94  


Цитата(warlock @ 17.1.2010, 5:43) *
Я реализовал его инкрементирование при прокрутке колесика
приведи код того как ты это сделал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 17.1.2010, 11:05
Сообщение #3


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

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(warlock @ 17.1.2010, 2:43) *
На данный момент свойство увеличиваеться при прокрутке колеска как вперед, так и назад.


Проверяй свойство int QWheelEvent::delta () const на отрицательность/положительность значения. Отрицательные значения - прокрутка назад, положительные - вперед.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
warlock
  опции профиля:
сообщение 17.1.2010, 13:47
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.1.2010
Пользователь №: 1378

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




Репутация:   0  


SABROG, да, точно, оно и есть) Как я упустил это свойство)
void MyWidget::wheelEvent(QWheelEvent *event)
{
    if(event->delta() > 0) m++;
    else m--;
    update();
}

сделал так, проще уже нельзя) Да и сложнее не нужно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.1.2010, 16:27
Сообщение #5


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

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

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




Репутация:   94  


лучше всё таки учитывать сму дельту, т.к. при резкой прокрутке мыша дельта может содержать большую величину чем обычно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
warlock
  опции профиля:
сообщение 17.1.2010, 17:54
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.1.2010
Пользователь №: 1378

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




Репутация:   0  


Litkevich Yuriy, ага, проверил, крутанул хорошенько колесико, вышло вместо 120 - 600. А чем для скроллинга или, например, масштабирования графика функции (в моем случае) это может быть плохо?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.1.2010, 18:18
Сообщение #7


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

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

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




Репутация:   94  


Цитата(warlock @ 17.1.2010, 20:54) *
А чем для скроллинга или, например, масштабирования графика функции (в моем случае) это может быть плохо?
ну человек резко крутит, чтобы быстрее изменить (масштаб или позицию), а ты всегда (на каждое событие) изменяешь на фиксированную величину. Это не ожиданно для пользователя и не приятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
azure
  опции профиля:
сообщение 18.1.2010, 16:01
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 60
Регистрация: 24.12.2009
Пользователь №: 1332

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 17.1.2010, 17:18) *
Цитата(warlock @ 17.1.2010, 20:54) *
А чем для скроллинга или, например, масштабирования графика функции (в моем случае) это может быть плохо?
ну человек резко крутит, чтобы быстрее изменить (масштаб или позицию), а ты всегда (на каждое событие) изменяешь на фиксированную величину. Это не ожиданно для пользователя и не приятно.

Вот кусок кода из qwt_magnifier.cpp (библиотека qwt), в котором обрабатывается скролл и производится перемасштабирование

Раскрывающийся текст
/*
A positive delta indicates that the wheel was
           rotated forwards away from the user; a negative
           value indicates that the wheel was rotated
           backwards toward the user.
           Most mouse types work in steps of 15 degrees,
           in which case the delta value is a multiple
           of 120 (== 15 * 8).
        */
        double f = ::pow(d_data->wheelFactor,
            qwtAbs(we->delta() / 120));
        if ( we->delta() > 0 )
            f = 1 / f;

        rescale(f);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 24.4.2024, 5:29