Russian Qt Forum

Qt => Общие вопросы => Тема начата: microdimmer от Март 24, 2011, 11:40



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


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


Название: Re: Замена нажатия клавиши
Отправлено: merke от Март 24, 2011, 11:59
Переопределяй у необходимых виджетов keyevent


Название: Re: Замена нажатия клавиши
Отправлено: microdimmer от Март 24, 2011, 12:30
Спасибо! Разобрался, написал в слоте к клавише:

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

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

Спасибо в любом случае!


Название: Re: Замена нажатия клавиши
Отправлено: Пантер от Март 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);
}
}
 

Может пригодится. :)


Название: Re: Замена нажатия клавиши
Отправлено: lisarden от Март 24, 2011, 13:05
а если у меня несколько виджетов, и вне зависимости от их активности нужно перехватывать стрелки с клавиатуры, то что нужно сделать?

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