Russian Qt Forum

Qt => Общие вопросы => Тема начата: panAlexey от Январь 19, 2010, 21:27



Название: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: panAlexey от Январь 19, 2010, 21:27
Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Шорткаты ака QShortcut не удалось приручить, мне нужно что-бы клавиатурные комбинации срабатывали только на виджете.
if (event->matches(QKeySequence::Copy))
и
if (event->matches(QKeySequence::Paste))
срабатывают только в случае (контрол|шифт)+инсерт.
А мну хочу еще контрол+(v|c)
Типа хелп :)


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: ufna от Январь 19, 2010, 21:33
лови нажатие клавиши и проверяй модификатор Ctrl.


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: panAlexey от Январь 19, 2010, 21:44
лови нажатие клавиши и проверяй модификатор Ctrl.
проверить модификатор самое легкое :)
Код:
	Qt::KeyboardModifiers  kbrdMod = qApp->keyboardModifiers();
bool ctrlPresed = (kbrdMod & Qt::ControlModifier) ? true : false;
Шас попробую поймать Qt::Key_V и Qt::Key_C
раньше пробовал так:
event->matches(QKeySequence::Paste);


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: panAlexey от Январь 19, 2010, 21:53
Вот что выдает на Ctrl+X, Ctrl+C, Ctrl+V
по дебагу:
Код:
qDebug() << "ctrlPresed = true; key: " << key <<" nativeScanCode " <<event->nativeScanCode () << " text " << event->text() <<" nativeVirtualKey: "<< event->nativeVirtualKey();
Debug: ctrlPresed = true; key:  16777249  nativeScanCode  29  text  ""  nativeVirtualKey:  17
Debug: ctrlPresed = true; key:  16777249  nativeScanCode  29  text  ""  nativeVirtualKey:  17
Debug: ctrlPresed = true; key:  16777249  nativeScanCode  29  text  ""  nativeVirtualKey:  17
Фигня какая-то :(((((((((((


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: Akaiten от Январь 20, 2010, 09:45
Код
C++ (Qt)
void MainWindow::keyPressEvent(QKeyEvent *e)
{
if (e->key() == Qt::Key_C && e->modifiers() & Qt::ControlModifier)
{
qDebug() << "Ctrl+C pressed!";
}
if (e->key() == Qt::Key_V && e->modifiers() & Qt::ControlModifier)
{
qDebug() << "Ctrl+V pressed!";
}
 
QMainWindow::keyPressEvent(e);
}
 


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: panAlexey от Январь 20, 2010, 19:02
Разобрался в чем дело.
У меня стояла проверка на event->isAccepted()
Почему-то в keyPressEvent( QKeyEvent * event )
она уже приходила акцептованной О_о....
Вроде не должно было быть....


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: lit-uriy от Январь 20, 2010, 20:53
Разобрался в чем дело.
У меня стояла проверка на event->isAccepted()
Почему-то в keyPressEvent( QKeyEvent * event )
она уже приходила акцептованной О_о....
Вроде не должно было быть....
если в событие попали, значит событие приняли - event->isAccepted() = истинна.


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: panAlexey от Январь 20, 2010, 22:19
Разобрался в чем дело.
У меня стояла проверка на event->isAccepted()
Почему-то в keyPressEvent( QKeyEvent * event )
она уже приходила акцептованной О_о....
Вроде не должно было быть....
если в событие попали, значит событие приняли - event->isAccepted() = истинна.
неа, но возможно ты про путаешь с QObject::event() где надо true возвращать?
Впрочем пойду перечитаю про события, может чего упустил.


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: lit-uriy от Январь 20, 2010, 22:24
Цитировать
Setting the accept parameter indicates that the event receiver wants the event. Unwanted events might be propagated to the parent widget. By default, isAccepted() is set to true, but don't rely on this as subclasses may choose to clear it in their constructor.
и вообще не в одном из примеров нет проверки этого флага, зачем ты эту проверку делал?


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: panAlexey от Январь 20, 2010, 23:16
Цитировать
Setting the accept parameter indicates that the event receiver wants the event. Unwanted events might be propagated to the parent widget. By default, isAccepted() is set to true, but don't rely on this as subclasses may choose to clear it in their constructor.
и вообще не в одном из примеров нет проверки этого флага, зачем ты эту проверку делал?
просто оптимизация, хотел отсеять кусок кода, если я уже отработал этот эвент.


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: lit-uriy от Январь 20, 2010, 23:56
>>если я уже отработал этот эвент
если отработал выдешь из функции.


Название: Re: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?
Отправлено: panAlexey от Январь 21, 2010, 10:17
>>если я уже отработал этот эвент
если отработал выдешь из функции.
Я использую несколько функций для обработки этого и не только этого эвента.
По этому и опираюсь на изАкцептид().