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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Замена нажатия клавиши  (Прочитано 5696 раз)
microdimmer
Гость
« : Март 24, 2011, 11:40 »

Здравствуйте! Подскажите пожалуйста, как в Qt можно реализовать замену нажатия клавиши? Например нажимаю клавишу F11, а эмулируется нажатие клавиши Tab. Или как можно заменить клавишу порядка обхода tab order?
Спасибо!
Записан
Sahab
Гость
« Ответ #1 : Март 24, 2011, 11:51 »

Цитировать
как в Qt можно реализовать замену нажатия клавиши?
один из вариантов - QWidget::keyPressEvent ( QKeyEvent * event )
Цитировать
как можно заменить клавишу порядка обхода tab order?
http://doc.qt.nokia.com/4.7-snapshot/designer-tab-order.html
Записан
merke
Гость
« Ответ #2 : Март 24, 2011, 11:59 »

Переопределяй у необходимых виджетов keyevent
Записан
microdimmer
Гость
« Ответ #3 : Март 24, 2011, 12:30 »

Спасибо! Разобрался, написал в слоте к клавише:

QApplication::postEvent(this,new QKeyEvent(QEvent::KeyPress, Qt::Key_Tab,Qt::NoModifier));

А про замену клавиши порядка обхода tab order, так и не нашел ничего.

Спасибо в любом случае!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Март 24, 2011, 12:58 »

Я себе недавно вот такую плюху замутил:
Код
C++ (Qt)
...............
keysMap_ [Qt::Key_2] = Qt::Key_Down;
keysMap_ [Qt::Key_4] = Qt::Key_Left;
keysMap_ [Qt::Key_6] = Qt::Key_Right;
keysMap_ [Qt::Key_8] = Qt::Key_Up;
keysMap_ [Qt::Key_5] = Qt::Key_Enter;
..............
void MainWindow::mapKeyEvent (const QKeyEvent* mappedEvent) const
{
const Qt::Key key = static_cast <Qt::Key> (mappedEvent->key ());
KeyMapIterator it (keysMap_);
 
while (it.hasNext ()) {
it.next ();
 
if (it.key () == key) {
QKeyEvent *ev = new QKeyEvent (mappedEvent->type (),
  it.value (),
  mappedEvent->modifiers (),
  mappedEvent->text ());
QApplication::sendEvent (declarativeView, ev);
}
}
}
 
void MainWindow::keyPressEvent (QKeyEvent* e)
{
QMainWindow::keyPressEvent (e);
 
if (e->modifiers () == 0) {
mapKeyEvent (e);
}
}
 

Может пригодится. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lisarden
Гость
« Ответ #5 : Март 24, 2011, 13:05 »

а если у меня несколько виджетов, и вне зависимости от их активности нужно перехватывать стрелки с клавиатуры, то что нужно сделать?

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


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