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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Замена нажатия клавиши  (Прочитано 5870 раз)
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

Сообщений: 5877


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


Просмотр профиля 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]   Вверх
  Печать  
 
Перейти в:  


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