crossplatform.ru

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


  Ответ в Как отключить скроллинг в QScrollArea при использовании колеса мыши
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Sokoloff Дата 2.9.2010, 18:24
 
Цитата(Алексей @ 2.9.2010, 18:51) *
ПС но почему фильтр не работает тоже хотелось бы понять


Цитата(Алексей @ 2.9.2010, 18:16) *
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);
}



Так ты же и не фильтруешь ничего. Я не знаю надо ли тут дергать ignore, но документация говорит следующее:
Цитата
In your reimplementation of this function, if you want to filter the event out, i.e. stop it being handled further, return true; otherwise return false.

т.е. тебе надо возвращать true.
Алексей Дата 2.9.2010, 17:51
 
Цитата(Sokoloff @ 2.9.2010, 20:32) *
Очень удобно, и структурировано, логика относящаяся к определенному виджету находится именно в его классе, а не где-то еще.

спасибо способ подойдёт

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


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

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

Алексей Дата 2.9.2010, 17:16
 
Цитата(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 Дата 30.8.2010, 23:40
 
Цитата(Алексей @ 30.8.2010, 20:08) *
пример выше на питоне - мне не понятно что он демонстрирует, поэтому уточняю про си, чтоб потом ещё раз не переспрашивать, а так конечно вопрос: только через фильтр можно сделать?


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

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

В этом же методе ты можешь реализовать свою обработку колеса мыши.
Litkevich Yuriy Дата 30.8.2010, 22:11
 
Цитата(Алексей @ 30.8.2010, 23:08) *
пример выше на питоне - мне не понятно что он демонстрирует, поэтому уточняю про си
Запись в питоне
def wheelEvent(self, e):
    ...
соответсвует записи в Си++:
void wheelEvent(QEvent e)
{
    ...
}
ufna Дата 30.8.2010, 20:43
  думаю что да, но installEventFilter() просто в использовании, можно класс не переопределять.
Алексей Дата 30.8.2010, 19:08
  пример выше на питоне - мне не понятно что он демонстрирует, поэтому уточняю про си, чтоб потом ещё раз не переспрашивать, а так конечно вопрос: только через фильтр можно сделать?
ufna Дата 30.8.2010, 18:59
  а причем здесь сипипи? :)
Алексей Дата 30.8.2010, 18:52
  а на с++ только через фильтр?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 19:43