crossplatform.ru

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

> Переопределение функции keyPressEvent для определенного виджета
AD
  опции профиля:
сообщение 19.3.2010, 18:41
Сообщение #1


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

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

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




Репутация:   17  


keyPressEvent переопределяется только для главного окна программы. А как сделать, чтобы кнопки, например, "+" и "-" соответствовали только определенному виджету в этом окне?

Сообщение отредактировал AD - 26.3.2010, 13:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
kwisp
  опции профиля:
сообщение 24.3.2010, 12:24
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


теперь ясно почему используешь eventFilter().
непонятно чего ты добиваешься этим кодом
Раскрывающийся текст
Цитата
bool T::eventFilter(QObject* object, QEvent* events)
{
    bool p1 = (object == tabTopoView -> chartWidget() || object == tabUniView -> chartWidget() ||
        object == tabMarineView -> chartWidget() || object == tabLibView -> chartWidget());

    if((object == tabTopoView -> chartWidget() || object == tabUniView -> chartWidget() ||
        object == tabMarineView -> chartWidget() || object == tabLibView -> chartWidget()) &&
        events -> type() == QEvent::KeyPress)
    {
        QKeyEvent* key_events(static_cast<QKeyEvent*> (events));
        switch(key_events -> key())
        {
        case Qt::Key_Plus:
            p1 = false;
        break;
        case Qt::Key_Minus:
        break;
        }
        return QMainWindow::eventFilter(object, events);
    }
    
    return QMainWindow::eventFilter(object, events);
}

зачем
Цитата
if((object == tabTopoView -> chartWidget() || object == tabUniView -> chartWidget() ||
object == tabMarineView -> chartWidget() || object == tabLibView -> chartWidget())

вот эта проверка если у тебя фильтр заточен под конкретную задачу. для тебя же нет разницы в какой виджет передали "+/-" -- гланое что было событие нажатия клавиши и клавиша эта + или -. получается это лишнее.

далее неясно вообще назначение локальной переменной bool p1. ты меняешь размеры её значение с какой целью непонятно. при выходе из локальной области видимости она разрушается.
тебе по можно либо напрямую в фильтре событий менять масштаб в case : Qt::Key_Plus и case : Qt::Key_Minus либо высылать к примеру специальный сигнал об увеличении/уменьшении масштаба.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 24.3.2010, 12:42
Сообщение #3


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

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

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




Репутация:   17  


Цитата(kwisp @ 24.3.2010, 12:24) *
далее неясно вообще назначение локальной переменной bool p1. ты меняешь размеры её значение с какой целью непонятно. при выходе из локальной области видимости она разрушается.
тебе по можно либо напрямую в фильтре событий менять масштаб в case : Qt::Key_Plus и case : Qt::Key_Minus либо высылать к примеру специальный сигнал об увеличении/уменьшении масштаба.

Да эта переменная была создана, так скажем, просто для проверки, что функция входит в данное условие. Естественно, позднее я собирался ее заменить полезным кодом. Повторюсь, что при нажатии на кнопки в эту функцию вообще не попадает дебаггер.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AD   Переопределение функции keyPressEvent для определенного виджета   19.3.2010, 18:41
- - Litkevich Yuriy   1) проверять в фокусе ли виджет 2) поставить фильт...   19.3.2010, 19:38
|- - AD   1) А какая именно функция проверяет? Не помню.... ...   22.3.2010, 18:18
|- - AD   Как поставить фильтр событий на нужный виджет?   23.3.2010, 13:33
- - Litkevich Yuriy   Цитата(AD @ 23.3.2010, 16:33) фильтр собы...   23.3.2010, 13:55
|- - AD   Cделал так. Что-то не то... Не заходит при нажатии...   23.3.2010, 16:05
|- - AD   Пожалуйста, помогите понять, как правильно сделать...   23.3.2010, 17:23
|- - AD   У меня не заходит внутрь условия, так как попадает...   24.3.2010, 10:20
- - kwisp   AD, по твоему коду вообще не понятно что ты хочеш...   24.3.2010, 11:08
|- - AD   Цитата(kwisp @ 24.3.2010, 11:08) AD, по ...   24.3.2010, 11:24
- - kwisp   Цитата(AD @ 24.3.2010, 11:24) Я хочу видж...   24.3.2010, 11:33
|- - AD   б)   24.3.2010, 11:54
- - kwisp   теперь ясно почему используешь eventFilter(). непо...   24.3.2010, 12:24
|- - AD   Цитата(kwisp @ 24.3.2010, 12:24) далее не...   24.3.2010, 12:42
- - kwisp   подозревают мешают проверки о которых я говорил. п...   24.3.2010, 12:50
|- - AD   Цитата(kwisp @ 24.3.2010, 12:50) подозрев...   24.3.2010, 13:00
- - kwisp   AD, остается фокус ввода. что дает его изменение ...   24.3.2010, 13:08
|- - AD   Цитата(kwisp @ 24.3.2010, 13:08) AD, ост...   24.3.2010, 15:38
- - kwisp   Цитата(AD @ 24.3.2010, 15:38) В виджете, ...   25.3.2010, 8:27
|- - AD   Цитата(kwisp @ 25.3.2010, 8:27) от куда т...   25.3.2010, 9:59
- - kwisp   Цитата(AD @ 25.3.2010, 9:59) Какой глобал...   25.3.2010, 10:21
|- - AD   Цитата(kwisp @ 25.3.2010, 10:21) если не ...   25.3.2010, 10:29
- - kwisp   AD, и я повторюсь. Попробуй унаследоваться от QAp...   25.3.2010, 10:37
|- - AD   А что по поводу фокуса ввода? Можно какой-нибудь м...   25.3.2010, 11:27
- - kwisp   Цитата(AD @ 25.3.2010, 11:27) А что по по...   25.3.2010, 13:26
|- - AD   Не удается такой финт ушами. Реально, нужна помощ...   25.3.2010, 15:45
|- - AD   Удалось попасть в глобальный фильтр событий, но дл...   26.3.2010, 13:36
- - kwisp   вопрос не по теме по-моему. попробуй вынести вынес...   25.3.2010, 16:06
- - AD   Цитата(kwisp @ 25.3.2010, 16:06) вопрос н...   25.3.2010, 16:43


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


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




RSS Текстовая версия Сейчас: 30.11.2024, 14:21