Я пытаюсь переслать все события нажатия клавиш из моего 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
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
персонажу управлять своими собственными нажатиями клавиш, но вам может быть трудно гарантировать, что разные элементы в вашей сцене не полагаются на одну и ту же клавишу (и), если вы не храните весь код обработки нажатия клавиш в одном месте ,
Вы должны переопределить событие keyPressEvent, чтобы захватить события нажатия клавиши