Нажатие клавиши «Вперед» из QGraphicsView

Я пытаюсь переслать все события нажатия клавиш из моего QGraphicsView в виджет, который в данный момент находится на сцене.

Мой QGraphicsView выглядит так:

Character_controller::Character_controller(Game_state * game_state) : Game_base_controller(game_state) {

this->character = new Character(this->game_state);

this->scene->addWidget(this->character);

connect(this, SIGNAL(keyPress(QKeyEvent *)), this->character, SLOT(update()));

}

А потом, мой персонаж, который подкласс QWidget, который должен получать все события нажатия клавиш

Character::Character(Game_state * game_state) : Base_object(game_state) {}

Character::~Character() {
}

void Character::update() {

cout << "HELLO FROM TIMER CONNECTED ITEM" << endl;}

По какой-то причине это не работает. Как я могу переслать все события нажатия клавиш из вида на моего персонажа?

Ошибка, которую я получаю, такова:

Object :: connect: Нет такого сигнала игры :: Character_controller :: keyPress (QKeyEvent *) в реализации / game_controllers / character_controller.cpp: 21

0

Решение

keyPress(QKeyEvent*) не существует в качестве сигнала, поэтому вы получаете сообщение об ошибке. Таким образом, вы не можете сделать это:

connect(this, SIGNAL(keyPress(QKeyEvent *)), this->character, SLOT(update()));

Чтобы зафиксировать события нажатия клавиш в графическом представлении, вам необходимо переопределить keyPressEvent функция:

void Character_controller::keyPressEvent(QKeyEvent* event)
{
// Call functions on your character here.
switch (event->key())
{
case Qt::Key_A:
character->moveLeft(); // For example
break;
case Qt::Key_D:
character->moveRight(); // For example
break;
...
}

// Otherwise pass to QGraphicsView.
QGraphicsView::keyPressEvent(event);
}

Вы могли бы просто передать QKeyEvent персонажу управлять своими собственными нажатиями клавиш, но вам может быть трудно гарантировать, что разные элементы в вашей сцене не полагаются на одну и ту же клавишу (и), если вы не храните весь код обработки нажатия клавиш в одном месте ,

3

Другие решения

Вы должны переопределить событие keyPressEvent, чтобы захватить события нажатия клавиши

3

По вопросам рекламы [email protected]