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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как поймать шорткат Ctrl+V and Ctrl+C в keyPressEvent( QKeyEvent * event)?  (Прочитано 10872 раз)
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« : Январь 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)
Типа хелп Улыбающийся
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
ufna
Гость
« Ответ #1 : Январь 19, 2010, 21:33 »

лови нажатие клавиши и проверяй модификатор Ctrl.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #2 : Январь 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);
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #3 : Январь 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
Фигня какая-то Грустный((((((((((
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Akaiten
Гость
« Ответ #4 : Январь 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);
}
 
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #5 : Январь 20, 2010, 19:02 »

Разобрался в чем дело.
У меня стояла проверка на event->isAccepted()
Почему-то в keyPressEvent( QKeyEvent * event )
она уже приходила акцептованной О_о....
Вроде не должно было быть....
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Январь 20, 2010, 20:53 »

Разобрался в чем дело.
У меня стояла проверка на event->isAccepted()
Почему-то в keyPressEvent( QKeyEvent * event )
она уже приходила акцептованной О_о....
Вроде не должно было быть....
если в событие попали, значит событие приняли - event->isAccepted() = истинна.
Записан

Юра.
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #7 : Январь 20, 2010, 22:19 »

Разобрался в чем дело.
У меня стояла проверка на event->isAccepted()
Почему-то в keyPressEvent( QKeyEvent * event )
она уже приходила акцептованной О_о....
Вроде не должно было быть....
если в событие попали, значит событие приняли - event->isAccepted() = истинна.
неа, но возможно ты про путаешь с QObject::event() где надо true возвращать?
Впрочем пойду перечитаю про события, может чего упустил.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Январь 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.
и вообще не в одном из примеров нет проверки этого флага, зачем ты эту проверку делал?
Записан

Юра.
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #9 : Январь 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.
и вообще не в одном из примеров нет проверки этого флага, зачем ты эту проверку делал?
просто оптимизация, хотел отсеять кусок кода, если я уже отработал этот эвент.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Январь 20, 2010, 23:56 »

>>если я уже отработал этот эвент
если отработал выдешь из функции.
Записан

Юра.
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #11 : Январь 21, 2010, 10:17 »

>>если я уже отработал этот эвент
если отработал выдешь из функции.
Я использую несколько функций для обработки этого и не только этого эвента.
По этому и опираюсь на изАкцептид().
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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