小车显示
首先将小车图片添加到资源文件中
在主绘制界面的绘图函数中调用资源图片显示函数,使得小车得以显示在界面上:
void MapCanvas::paintEvent(QPaintEvent *e)
{
painter.drawPixmap(1,1,QPixmap(":/new/prefix1/Image2/blackcar.png"));
}
试验将车辆显示到直道正中央
//小车运动/
if(!ListScenes.isEmpty())
{
if(ListScenes.at(0)->SceneType==Scene::Straight)//如果此时创建的道路是直道
{
Straight* straight = (Straight*)ListScenes.at(0);
QPointF posScene = toWidget(straight->pos()); //真实世界坐标转成屏幕坐标
painter.drawPixmap(posScene.x(),posScene.y(),10/Scale,5/Scale,QPixmap(":/new/prefix1/Image2/blackcar.png"));
}
}
车辆的左上角顶在直道的中心
小车实际运动(无规则)
已经实现小车能在屏幕上无规则的运动,主要利用了Qt的定时器功能
//*******************************定时器事件,用于小车的移动*********************
if(!ListScenes.isEmpty()) //试验让小车能够显示
{
if(ListScenes.at(0)->SceneType==Scene::Straight)//如果此时创建的道路是直道
{
Straight* straight = (Straight*)ListScenes.at(0);
QPointF posScene = toWidget(straight->pos()); //真实世界坐标转成屏幕坐标
CarPosX=posScene.x()-10/2/Scale;
CarPosY=posScene.y()-5/2/Scale; //减去图片的长宽
CarPosGlobal=toGlobal(QPointF(CarPosX,CarPosY)); //先将全局真实坐标转化成屏幕坐标进行处理
}
}
QTimer* timer=new QTimer(this);
timer->start(Internaltime);
connect(timer,&QTimer::timeout,[=]()
{
CarPosGlobal.setX(CarPosGlobal.x()+0.1);
CarPosWidget=toWidget(CarPosGlobal);
update(); //手动调用绘图事件,用update更新小车位置
qDebug()<<"更新小车位置"<<CarPosGlobal.x();
});
//定时器内容,用于小车的显示end//
//painter.drawPixmap(CarPosWidget.x(),CarPosWidget.y(),9/Scale,16/Scale,QPixmap(":/xiaoche/BlackPolice Car.png"));
QMatrix matrix;
matrix.rotate(90);
painter.drawPixmap(CarPosWidget.x(),CarPosWidget.y(),16/2/Scale,9/2/Scale,QPixmap(":/xiaoche/BlackPolice Car.png").transformed(matrix, Qt::SmoothTransformation));//实现小车图片的转向
```![请添加图片描述](https://img-blog.csdnimg.cn/680f9276c0fe41949879fd108ffc45ff.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCY56a75pyo5pyo,size_20,color_FFFFFF,t_70,g_se,x_16)