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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Симуляция нажатия клавиши клавиотуры  (Прочитано 13518 раз)
brucemax
Гость
« : Декабрь 01, 2011, 15:42 »

Клик по кнопке коннектится со слотом:
Код:
void okno::Down()
{
   int   nKey    = Qt::Key_Down ;
    QKeyEvent* pe =
    new QKeyEvent(QEvent::KeyPress, nKey, Qt::NoModifier);
    QApplication::sendEvent(this, pe);
}
то есть хочу нажимать на кнопку на форме и чтобы она симулировала нажатие кнопки "вниз" на клавиатуре.  ( При нажатии кнопки вниз на клаве в приложение перемещается фокус по кнопкам..  надо чтоб такое же происходило по нажатию кнопки на форме)
но пока этого не присходит..  видимо в sendEvent в качестве получателя я нето что надо пишу...  Подскажите решение?
« Последнее редактирование: Декабрь 02, 2011, 10:37 от brucemax » Записан
andrew.k
Гость
« Ответ #1 : Декабрь 01, 2011, 19:29 »

a setFocus не устраивает?
Записан
Bepec
Гость
« Ответ #2 : Декабрь 02, 2011, 07:03 »

to andrew.k
setFocus надо обрабатывать, определять какая кнопка ниже, перенаправлять на ту кнопку.

А вот если передать событие нажатия - тогда все это (причем по умолчанию), рассчитает виджет.

По теме:

Пытался когда то съимитировать нажатия клавиш, но не преуспел к сожалению.
Записан
andrew.k
Гость
« Ответ #3 : Декабрь 02, 2011, 08:55 »

Может твоей кнопке на форме нужно поставить FocusPolicy NoFocus?
Записан
Bepec
Гость
« Ответ #4 : Декабрь 02, 2011, 08:59 »

А каким местом политика фокуса имеет к имитации нажатия клавиши?

Задача поставленная ТС - при щелчке на кнопку имитировать нажатие "вниз" на клавиатуре.
Записан
andrew.k
Гость
« Ответ #5 : Декабрь 02, 2011, 08:59 »

Цитировать
void okno::Down()
Просто супер)
Записан
andrew.k
Гость
« Ответ #6 : Декабрь 02, 2011, 09:00 »

А каким местом политика фокуса имеет к имитации нажатия клавиши?

Задача поставленная ТС - при щелчке на кнопку имитировать нажатие "вниз" на клавиатуре.
А ты подумай головой.
Записан
Bepec
Гость
« Ответ #7 : Декабрь 02, 2011, 09:03 »

andrew.k мб вам стоит подумать?

При нажатии клавиши фокус уже появляется на ней. Если между pressed и released нажать вниз, то "О чудо", курсор упадет вниз на следующий элемент. И это с нормальным фокусом.

С NoFocus как раз фокус то придется делать самому, чтобы перейти на 1 элемент ниже.

м?
// PS данное утверждение протестировано   [12/2/2011 Bepec]
Записан
andrew.k
Гость
« Ответ #8 : Декабрь 02, 2011, 09:15 »

Верес, ты знаешь, практически в каждом твоем сообщении я либо не вижу смысла, либо не могу его понять, либо не могу его понять с первого раза. Это сообщение не исключение.
Это только у меня так?

Не знаю, что ты там проверял, но если он коннектится к сигналу clicked(), то по щелчку фокус будет переходить на эту кнопку "вниз". а по доставке события - на следуйщий элемент, которым будет уже явно не тот. И после каждого щелчка фокус будет на одном и том же виджете.

Если он коннектится к pressed, то фокус сначала перейдет как надо, а потом виджет в любом случае должен среагировать на щелчек и выставить себе фокус. И будет это скорее всего после того, как был выставлен нужный фокус.
Поэтому в этом случае в результате фокус останется на самой кнопке "вниз".

Поэтому нужно NoFocus, чтобы кнопка не принимала фокус по щелчку по ней.


м?
Записан
Bepec
Гость
« Ответ #9 : Декабрь 02, 2011, 09:50 »

to adnrew.k:

Каюсь, прочитал заголовок темы, потом еще раз прочитал, потом только понял что хотел сказать ТС (Моя вина -  что не понял, его вина - что не расписал)

Согласен с вашим Qt::NoFocus.
/*Прости меня, Васенька, дуру грешную!*/

to brucemax:

Собственно что вы хотите сделать, распишите, а мы более оптимальный вариант предложим.
Записан
brucemax
Гость
« Ответ #10 : Декабрь 02, 2011, 10:18 »

Видимо из-за того что я новичёк..   слова Вереса мне больше понятны))
Спасибо за полемику..   задача решена иным способом=)    Но симулировать нажатие клавиши Up так и не удалось..  а вот симуляция нажатия символьной клавиши и вывод например в лайнэдит..   это легко)
Записан
brucemax
Гость
« Ответ #11 : Декабрь 02, 2011, 10:24 »

А сделал так..  радиобатаны которые нажимаются по нажатии на кноПку на форме (как и по нажатию на "Down" )  объединил в массив..  а кноПка коннектится со слотом:
Код:
void okno::Down()
{
    static const int ct_iButtonNum = sizeof(m_pButtons)/sizeof(m_pButtons[0]);
    if(ct_iButtonNum <= ++a)
    a = 0;
    m_pButtons[a]->click();
}
Вот)
Записан
Bepec
Гость
« Ответ #12 : Декабрь 02, 2011, 10:26 »

Молодца что то похожее предлагал и andrew.k.

Теперь переименуй тему(переименовать 1 твое сообщение заголовок Тема) в [РЕШЕНО]название темы.

Улыбающийся
Записан
andrew.k
Гость
« Ответ #13 : Декабрь 02, 2011, 17:29 »

Молодца что то похожее предлагал и andrew.k.
Я такое не предлагал.

Проверил. Действительно почему-то событие с Qt::Key_Down/Up не дают нужного эффекта.
Событие доходит, но виждет его игнорирует. и фокус не перемещается, когда вроде бы должен. Интересно почему?
Qt::Key_Tab работает.

Сильные форума сего. Поясните)

В любом случае. не все контролы по стрелкам отдают фокус. По таб да большинство. По стрелкам нет.
Поэтому зачем делать такой механизм? Пользователю проще щелкнуть на нужный контрол, чем щелкать на некую кнопку, чтобы фокус перешел от одного к другому. Бред же.
« Последнее редактирование: Декабрь 02, 2011, 17:30 от andrew.k » Записан
Bepec
Гость
« Ответ #14 : Декабрь 05, 2011, 07:06 »

Видимо это заготовка на будущее. У меня подобное используется в табличных представлениях - чтобы двигать туды сюды, но правда не таким извращенным способом Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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