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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не удается отлавливать нажатие клавиш  (Прочитано 6197 раз)
Africa
Гость
« : Июнь 01, 2010, 12:44 »

Всем привет, пробую написать тетрис. Столкнулся с проблемой не могу отловить нажатие клавиш на клавиатуре.

Вот описание класса:

Код:
class Tetris: public QWidget{
    Q_OBJECT
public:
    Tetris();
Form form;
QTableWidgetItem *items[20][12];
int milk[20][12];
QTime time;
int speed;
bool keystroke[4];
void create_table ();
void paint_piece(Qt::GlobalColor color, piece newpiece);
void timer();
void change_piece(int = -1);
void keyPressEvent(QKeyEvent* );
}

вот описание самой процедуры keyPressEvent:

Код:
void Tetris::keyPressEvent( QKeyEvent* key )
{          qDebug()<<"key presed!!!!";
  enum keystroke_type key_type;
    if( keystroke[KEY_LEFT] == false && keystroke[KEY_RIGHT] == false
        && keystroke[KEY_UP] == false && keystroke[KEY_DOWN] == false )
    switch( key->key() )
    {
      case Qt::Key_Left:
          key_type = KEY_LEFT;
          qDebug()<<"left";
          keystroke[KEY_LEFT] = true;
        break;
      case Qt::Key_Right:
          qDebug()<<"right";
          keystroke[KEY_RIGHT] = true;
        break;
      case Qt::Key_Up:
      keystroke[KEY_UP] = true;
        key_type = KEY_UP;
        break;
      case Qt::Key_Down:
        keystroke[KEY_DOWN] = true;
        key_type = KEY_DOWN;
        break;
    }

};

запускаю жму любые клавиши но никаких сообщений в консоль не выводит  .....
Записан
developer
Гость
« Ответ #1 : Июнь 01, 2010, 14:20 »

Передай (в конце функции keyPressEvent) на обработку парент классу. - QWidget::keyPressEvent(key) - что-то типа етого
Записан
Africa
Гость
« Ответ #2 : Июнь 01, 2010, 14:25 »

не помогло ((((
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Июнь 01, 2010, 14:39 »

см.
<твой путь к Qt4>\qt\examples\widgets\tetrix\
Записан

ArchLinux x86_64 / Win10 64 bit
Africa
Гость
« Ответ #4 : Июнь 08, 2010, 11:04 »

Проблема как оказалось была вовсе не в методе keyPressEvent(). Проблема была вот в чем: сам keyPressEvent() это был метод класса Tetris, но сама форма была создана в QT Designer, соответственно вопрос можно ли средствами QT Designer описать метод keyPressEvent() или как то по другому для виджетов формы обрабатывать события от клавиатуры. Просто ежели руками править мой файл ui_tetris.h это как то не очень логично мне думается.
Записан
denisab85
Гость
« Ответ #5 : Июнь 13, 2010, 17:39 »

Тебе, наверное, сюда: http://scriptumplus.ru/article/QT4_fast_start
смотри гл. 4. Редактор связей
там как раз о том, как в дизайнере связать сигнал виджета с собственным слотом
« Последнее редактирование: Июнь 13, 2010, 17:43 от denisab85 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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