crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Как отключить скроллинг в QScrollArea при использовании колеса мыши
Алексей
  опции профиля:
сообщение 30.8.2010, 18:18
Сообщение #1


Студент
*

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

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




Репутация:   0  


Как отключить скроллинг в QScrollArea который возникает при использовании колеса мыши?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 30.8.2010, 18:29
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


Цитата(Алексей @ 30.8.2010, 19:18) *
Как отключить скроллинг в QScrollArea который возникает при использовании колеса мыши?

Перекрыть ScrollArea::wheelEvent http://doc.crossplatform.ru/qt/4.6.x/qabst...html#wheelEvent и для события дернуть ignore()
def wheelEvent(self, e):
        e.ignore()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей
  опции профиля:
сообщение 30.8.2010, 18:52
Сообщение #3


Студент
*

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

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




Репутация:   0  


а на с++ только через фильтр?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 30.8.2010, 18:59
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

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




Репутация:   5  


а причем здесь сипипи? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей
  опции профиля:
сообщение 30.8.2010, 19:08
Сообщение #5


Студент
*

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

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




Репутация:   0  


пример выше на питоне - мне не понятно что он демонстрирует, поэтому уточняю про си, чтоб потом ещё раз не переспрашивать, а так конечно вопрос: только через фильтр можно сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 30.8.2010, 20:43
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

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




Репутация:   5  


думаю что да, но installEventFilter() просто в использовании, можно класс не переопределять.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.8.2010, 22:11
Сообщение #7


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

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

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




Репутация:   94  


Цитата(Алексей @ 30.8.2010, 23:08) *
пример выше на питоне - мне не понятно что он демонстрирует, поэтому уточняю про си
Запись в питоне
def wheelEvent(self, e):
    ...
соответсвует записи в Си++:
void wheelEvent(QEvent e)
{
    ...
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 30.8.2010, 23:40
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


Цитата(Алексей @ 30.8.2010, 20:08) *
пример выше на питоне - мне не понятно что он демонстрирует, поэтому уточняю про си, чтоб потом ещё раз не переспрашивать, а так конечно вопрос: только через фильтр можно сделать?


Что то с сайтом были проблемы, поэтому отвечаю только сейчас.
Пример был на питоне, потому что у меня был в это время открыт питоновский проект. А так, от языка здесь ничего не зависит, это чисто Qt-шная фишка.
На C++ это будет выглядеть так:
void YourClass::wheelEvent ( QWheelEvent * e )  
{
    e->ignore();
}

Где YourClass - это твой наследник от ScrollArea.

В этом же методе ты можешь реализовать свою обработку колеса мыши.

Сообщение отредактировал Sokoloff - 30.8.2010, 23:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей
  опции профиля:
сообщение 2.9.2010, 17:16
Сообщение #9


Студент
*

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

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




Репутация:   0  


Цитата(ufna @ 30.8.2010, 23:43) *
думаю что да, но installEventFilter() просто в использовании, можно класс не переопределять


В конструкторе устанавливаю фильтры:
    ui->scrollArea->viewport()->installEventFilter(this);
    ui->scrollArea->installEventFilter(this);
    ui->scrollAreaWidgetContents->installEventFilter(this);

в фильтре:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if(event->type() == QEvent::Wheel)
    {
        QWheelEvent *wEvent = static_cast<QWheelEvent*>(event);
        wEvent->ignore();
    }

    return QMainWindow::eventFilter(obj, event);
}


Но прокрутка всё равно не исчезает пробовал даже на Qlabel внутри scrollArea добавлять фильтр - всё равно не помогает.

Цитата(Sokoloff @ 31.8.2010, 2:40) *
Что то с сайтом были проблемы, поэтому отвечаю только сейчас.

У меня тоже с сайтом были проблемы, так что всё норм.

Цитата(Sokoloff @ 31.8.2010, 2:40) *
Где YourClass - это твой наследник от ScrollArea.

Не хотелось бы делать наследника, так как для компоновки диалога использую дизайнер, а для того чтобы созданный виджет корректно отображался в нём нужно создавать плагин для дизайнера, что пока ещё в процессе освоения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 2.9.2010, 17:32
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


Цитата(Алексей @ 2.9.2010, 18:16) *
Не хотелось бы делать наследника, так как для компоновки диалога использую дизайнер, а для того чтобы созданный виджет корректно отображался в нём нужно создавать плагин для дизайнера, что пока ещё в процессе освоения.


А вот и не надо, в дизайнере есть обалденная вещь "Promoting" (в русском переводе "Преобразовать в..."). Прям в дизайнере указываешь, что вместо QScrollArea, надо использовать твой класс из такого то заголовочного файла. http://doc.crossplatform.ru/qt/4.6.x/desig...om-widgets.html

Очень удобно, и структурировано, логика относящаяся к определенному виджету находится именно в его классе, а не где-то еще.

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

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 11:38