从QGraphicsView转发按键
Forward Key Press from QGraphicsView
本文关键字:转发 QGraphicsView 更新时间:2023-10-16
我正在尝试将所有按键事件从我的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;
}
出于某种原因,这不起作用。如何将视图中的所有按键事件转发到我的角色?
我得到的错误是这样的:
对象::连接:没有这样的信号游戏::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 事件才能捕获按键事件
相关文章:
- 正在折叠转发引用
- 将函数参数完美转发到函数指针:按值传递呢?
- 调整布局上的 QGraphicsView 小部件的大小
- 转发变量参数列表以模拟 std::thread
- 在按值调用 (c++) 中转发构造函数参数
- 存储稍后要转发的变量参数
- 如何在 C++ 中转发声明 std::set?
- C++使用默认模板参数键入别名和转发声明
- CNTK:->转发或 ->评估某些电脑上的崩溃,而不是其他电脑上的崩溃
- 将 QGraphicsView 或 Scene 转换为 XML/JSON
- C++20理念:要求表达和完美转发
- 如何在模板中转发右值和左值引用
- 如何转发声明枚举?
- 使用函数指针转发声明作为 lamba 声明
- CAFFE转发网络在for循环中不起作用
- 如何将迭代器调用转发给类的私有成员?
- 转发复制的 std::tuple
- 完美的转发和构造函数
- 是否可以在不扣除的情况下将模板参数转发到 make_*?
- 从QGraphicsView转发按键