移动场景中的项目Qt
Move an item in a scene Qt
我试图在场景中移动一个项目,为此,我使用了QKeypressEvent
和moveBy
,它们都很好地工作,但我想恢复"按键事件",所以我决定首先使用一个布尔值,当按键时返回true,不按键时返回false,然后创建一个新函数,如果我的布尔值为true,我会调用moveBy
,但不幸的是,它不起作用。这是我在我的文件.cpp 中所做的
Perso::Perso()
{
right= false;
left= false;
up= false;
down= false;
moveOnMap();
setFlag(QGraphicsItem::ItemIsFocusable);
}
void Perso::moveOnMap(){
if (left) {
moveBy(-10,0);
}
if (right) {
moveBy(10,0);
}
if (up) {
moveBy(0, -10);
}
if (down) {
moveBy(0, +10);
}
}
void Perso::keyPressEvent(QKeyEvent *event){
switch(event->key()){
case Qt::Key_Up:
up=true;
//moveBy(0, -10);
break;
case Qt::Key_Right:
right=true;
// moveBy(10,0);
break;
case Qt::Key_Left:
left=true;
//moveBy(-10,0);
break;
case Qt::Key_Down:
down= true;
//moveBy(0, 10);
break;
}
update();
}
void Perso::keyReleaseEvent(QKeyEvent *event){
switch(event->key()){
case Qt::Key_Up:
up=false;
break;
case Qt::Key_Right:
right= false;
break;
case Qt::Key_Left:
left= false;
break;
case Qt::Key_Down:
down= false;
break;
}
}
有人能帮我明白我错在哪里吗?
我在这里看不到你调用moveOnMap();
如果在你的原始代码中你没有调用这个方法,那么它不起作用是正常的。您只在构造函数中调用它,但每次按键都应该调用此方法。所以试着在你的关键事件中调用这个方法:
void Perso::keyPressEvent(QKeyEvent *event){
switch(event->key()){
case Qt::Key_Up:
up=true;
//moveBy(0, -10);
break;
case Qt::Key_Right:
right=true;
// moveBy(10,0);
break;
case Qt::Key_Left:
left=true;
//moveBy(-10,0);
break;
case Qt::Key_Down:
down= true;
//moveBy(0, 10);
break;
}
moveOnMap();
update();
}
void Perso::keyReleaseEvent(QKeyEvent *event){
switch(event->key()){
case Qt::Key_Up:
up=false;
break;
case Qt::Key_Right:
right= false;
break;
case Qt::Key_Left:
left= false;
break;
case Qt::Key_Down:
down= false;
break;
}
moveOnMap();
}
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- QT通过C++添加映射QML项目
- 错误-我无法在VS2019中打开新的Qt项目
- 将QT项目导入Visual Studio 2019会给我带来很多LNK2001错误
- C++,Qt:仅在双击后编辑qtablewidget项目
- 在Qt/C++中从一个代码构建两个略有不同的项目
- 如何识别项目是 QT 中的文件还是文件夹
- 将Qt集成到现有的VS项目中以取代WinAPI
- 尝试在 QT 项目中调用 Java 代码时未找到类异常
- Qt - 为什么Visual Studio 2019在qml资源中添加10Mb文件后无法再编译我的项目?
- 无法在默认Qt项目中打开源文件"ui_QtGuiApplication.h"
- 在路径的独立Qt项目中包括外部库
- Qt创建者:加载位于子目录中的项目文件
- 将Qt Designer项目转换为C++代码
- 为Qt项目树中的所有项目定义全局宏
- 部署基于 qt 的项目后,我的 sqlite3 文件不会被复制 (android)
- 项目引用上的QT访问冲突
- CMake用于C++/Qt项目中的外部库
- QT Creator无法创建纯C++项目或HTML5项目(QT Creator直接关闭)
- 移动场景中的项目Qt