北京p2p网站建设,交易网站模板,wordpress 时间,wordpress大全通过鼠标在窗口上点击形成多个点的连线#xff0c;绘制一辆汽车沿着绘制的连线轨迹前进。要求连线点数大于20.可以通过清除按钮清除已经绘制的连线#xff0c;并可以重新绘制一条轨迹连线。当车辆行驶到轨迹终点时#xff0c;自动停止。#xff08;汽车实在可用方块代替绘制一辆汽车沿着绘制的连线轨迹前进。要求连线点数大于20.可以通过清除按钮清除已经绘制的连线并可以重新绘制一条轨迹连线。当车辆行驶到轨迹终点时自动停止。汽车实在可用方块代替 首先思考点是可以撤销的所以我们需要一个数据结构去记录这些点按顺序绘制撤销时从数据结构中删除点即可。
这样我们在按下鼠标左键时的动作就很简单了将具体的点记录到数据结构中。
//鼠标信号处理
void MainWindow::mousePressEvent(QMouseEvent* m)
{//左键点击加入点右键点击撤销操作if(m-button() Qt::LeftButton){QPoint p m-pos();m_pointArray.push_back(p);update();} else if (m-button() Qt::RightButton) {m_pointArray.pop_back();update();}
}
需要一个定时器当用户选择让小车跑起来时动态更新小车的位置。
void MainWindow::on_timer()
{car_pos ;
}在paintEvent中具体的绘制线路以及小车
//绘制信号处理
void MainWindow::paintEvent(QPaintEvent *)
{QPainter painter(this);paintRoad(painter);drawCar(painter);
}//绘制地图
void MainWindow::paintRoad(QPainter *painter)
{//QPainter painter(this);painter-setPen(QPen(Qt::blue,2, Qt::SolidLine, Qt::RoundCap));//设置画笔形式for(int i 0; i m_pointArray.count(); i ){if (i 1){continue;}painter-drawLine(m_pointArray[i-1],m_pointArray[i]);}
}
//绘制小车
void MainWindow::drawCar(QPainter *painter)
{if(m_pointArray.count() 0){return;}painter-setPen(QPen(Qt::red, 2, Qt::SolidLine, Qt::RoundCap));if (car_pos m_pointArray.count()){car_pos m_pointArray.count() -1;}painter-drawRect(m_pointArray[car_pos].x() - Car_Radius,m_pointArray[car_pos].y() - Car_Radius,Car_Radius*2,Car_Radius*2);update();
}