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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: как передать eventFilter  (Прочитано 6710 раз)
zloyGamer
Гость
« : Декабрь 01, 2009, 04:25 »

как передать сообщение дочернему обьекту, например
bool quickSearch::eventFilter(QObject *obj, QEvent *event)
{
  if (event->type() == QEvent::KeyPress)
  {
    QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);

    if( obj == (QObject*)ui->lineEdit )
    {
      if(keyEvent->key() == Qt::Key_Down || keyEvent->key() == Qt::Key_Up)
      {
        //ui->view->eventFilter(obj,event);
        //ui->view->eventFilter(ui->view,event);
        return 1;
      }
    }
  }
  return QMainWindow::eventFilter(obj,event);
}
надо чтобы во вьюшку поступили сигналы о нажатии клавиш вниз и вверх, и сработала стандартная обработка этих событий - т.е. переход на следующий, предыдущий элемент..

для ui->view никаких eventFilter'ов я непереопределял,
как это можно сделать неполучая и проставляя текущие индексы?
Записан
sendevent
Гость
« Ответ #1 : Декабрь 01, 2009, 05:29 »

eventFilter нужен для ровно наоборот - "когда во view пришло событие "нажатие кнопки" - мы в "фильтре событий" можем кастомизировать обработку" (типа WinAPI'шного hook'а), т.е. алгоритм примерно такой:
1: для view генерируется событие;
2: мы его перехватываем в другом классе;
2.а: если событие "искомое" - обрабатываем customized; иначе - 2.б;
2.б: оставляем обработку события адресату;
Код:
bool SomeParent::eventFilter( QObject *obj, QEvent *event )
{
    if( event->type() == QEvent::Wheel )
    {
        QWheelEvent *wheelEvent = static_cast<QWheelEvent *>(event);
        if( customProcessChildWheelEvent( wheelEvent ) )
        {
            event->accept();
            return true;
        }
    }

    return QObject::eventFilter(obj, event); //-- standard event processing, e.g. default event handler
}
Цитировать
сигналы о нажатии клавиш <...> обработка этих событий
будут выполнены без всякого вмешательства с eventFilter, если у вьюхи есть обработчики.
Записан
zloyGamer
Гость
« Ответ #2 : Декабрь 01, 2009, 05:46 »

понятно что eventFilter нужен для кастомизации обработки событий, но как мне эти события передать во view (QListView) ?
Записан
sendevent
Гость
« Ответ #3 : Декабрь 01, 2009, 06:22 »

Код:
bool CustomEventHandler::eventFilter( QObject *obj, QEvent *event )
{
    return, млядь, QObject::eventFilter(obj, event); //-- standard event processing, e.g. DEFAULT EVENT HANDLER
}
хтото когото не понимает. не?
« Последнее редактирование: Декабрь 01, 2009, 06:39 от sendevent » Записан
sendevent
Гость
« Ответ #4 : Декабрь 01, 2009, 06:40 »

 хто такой view - адресат события? или ваще левый объект, в которые надо передать событие, направленное не к нему?
Записан
zloyGamer
Гость
« Ответ #5 : Декабрь 01, 2009, 06:47 »

да, view - это левый обькт которому надо передать определенные нажатия клавиш, и пусть он сам определяет как их обрабатывать
Записан
sendevent
Гость
« Ответ #6 : Декабрь 01, 2009, 07:34 »

либо вызываем "свой" метод:
Код:
bool SomeParent::eventFilter( QObject *obj, QEvent *event )
{
    if( event->type() == TARGET_EVENT )
    {
        return m_pHandler->customProcessEvent( event );
    }       

    return QObject::eventFilter(obj, event); //-- standard event processing, e.g. default event handler
}
либо шлем сообщение:
Код:
bool SomeParent::eventFilter( QObject *obj, QEvent *event )
{
    if( event->type() == TARGET_EVENT )
    {
        //-- pEvent = new Event...
        //-- CoreApplication::post/sendEvent( m_pHandler, pEvent );
        //-- etc...
    }       

    return QObject::eventFilter(obj, event); //-- standard event processing, e.g. default event handler
}
либо я так и не понял, что в конце-концов надо... утро вечера мудренее будет Подмигивающий
Записан
SASA
Гость
« Ответ #7 : Декабрь 01, 2009, 11:17 »

оффтоп.
zloyGamer, аватар в 1,3 Мб - ЗЛО!!!
Записан
zloyGamer
Гость
« Ответ #8 : Декабрь 01, 2009, 15:12 »

пардон, уже исправились, щас проверить метод немогу, как получится отпишусь.
Записан
zloyGamer
Гость
« Ответ #9 : Декабрь 03, 2009, 07:08 »

спасибо sendevent
QCoreApplication::sendEvent( ui->view, myevent);  - это то что надо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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