crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Нажатие дополнительных клавиш, как правильно сделать?
AD
  опции профиля:
сообщение 14.7.2008, 15:42
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Как правильно обрабатывать сочетания клавиш в функции keyPressEvent()? Например сочетания: Alt+Enter, Alt+y, etc!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 14.7.2008, 16:16
Сообщение #2


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


void YourWidget::keyPressEvent(QKeyEvent *event) {
         switch(event->key()) {
              case Qt::Key_S:
                               if(event->modifiers() & Qt::ShiftModifier) {
                                                                  //было нажато сочетание Shift + S
                               }
                               else if(event->modifiers() & Qt::CTRL) {
                                                                  //было нажато сочетание Ctrl + S
                               }
              default:
                               QWidget::keyPressEvent(event); //иначе передаем событие дальше
        }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.7.2008, 16:27
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


void*, спасибо! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Red Devil
  опции профиля:
сообщение 14.7.2008, 16:59
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 6.6.2008
Из: Saint-Petersburg
Пользователь №: 194

Спасибо сказали: 1 раз(а)




Репутация:   3  


Проще QAction использовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 14.7.2008, 17:20
Сообщение #5


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


возможно в некоторых случаях и удобнее, пример:
QAction *act = new QAction("text");
act->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); //так называемые горячие клавиши
connect(act, SIGNAL(triggered()), pointer, SLOT(someSlot())); //итого: при нажатии комбинации Ctrl + S выполнится слот someSlot() объекта на который указывает pointer
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.7.2008, 17:30
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Стоп! Вот эта новость! А разве QAction не связан с панелью меню? Разве его можно использовать отдельно от панели меню????
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Red Devil
  опции профиля:
сообщение 14.7.2008, 20:51
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 6.6.2008
Из: Saint-Petersburg
Пользователь №: 194

Спасибо сказали: 1 раз(а)




Репутация:   3  


Естественно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 14.7.2008, 20:54
Сообщение #8


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


AD, и еще таким образом можно сделать в программе тайные (недокументированные) функции, которые работают только при нажатии определенной комбинации клавиш :)

Сообщение отредактировал void* - 14.7.2008, 20:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.7.2008, 10:20
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(void* @ 14.7.2008, 21:54) *
AD, и еще таким образом можно сделать в программе тайные (недокументированные) функции, которые работают только при нажатии определенной комбинации клавиш :)

Ну выношу в топик. Вариант с keyPressEvent работает. А вот с QAction что-то не получилось! Поэтому, кто знает в чем может глюк, помогите, пожалуйста.
Код такой:
QAction* act = new QAction("test", this);
act -> setShortcut(QKeySequence(Qt::ALT + Qt::Key_X));
connect(act, SIGNAL(triggered()), this, SLOT(close()));

Делаю эти действия в конструкторе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Red Devil
  опции профиля:
сообщение 15.7.2008, 13:45
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 6.6.2008
Из: Saint-Petersburg
Пользователь №: 194

Спасибо сказали: 1 раз(а)




Репутация:   3  


QAction* act = new QAction("test", this);
act -> setShortcut(QKeySequence(Qt::ALT + Qt::Key_X));
connect(act, SIGNAL(triggered()), this, SLOT(close()));
addAction(act);

либо можно QShortcut еще использовать, там практически тоже самое, только addAction делать не нужно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 9:47