• C++(QT)画图行车


    通过鼠标在窗口上点击形成多个点的连线,绘制一辆汽车沿着绘制的连线轨迹前进。要求连线点数大于20.可以通过清除按钮清除已经绘制的连线,并可以重新绘制一条轨迹连线。当车辆行驶到轨迹终点时,自动停止。(汽车实在可用方块代替)

    首先思考:点是可以撤销的,所以我们需要一个数据结构去记录这些点,按顺序绘制,撤销时从数据结构中删除点即可。

    这样我们在按下鼠标左键时的动作就很简单了,将具体的点记录到数据结构中。

    1. //鼠标信号处理
    2. void MainWindow::mousePressEvent(QMouseEvent* m)
    3. {
    4. //左键点击加入点,右键点击撤销操作
    5. if(m->button() == Qt::LeftButton)
    6. {
    7. QPoint p = m->pos();
    8. m_pointArray.push_back(p);
    9. update();
    10. } else if (m->button() == Qt::RightButton) {
    11. m_pointArray.pop_back();
    12. update();
    13. }
    14. }

    需要一个定时器,当用户选择让小车跑起来时,动态更新小车的位置。

    1. void MainWindow::on_timer()
    2. {
    3. car_pos ++;
    4. }

    在paintEvent中具体的绘制线路以及小车

    1. //绘制信号处理
    2. void MainWindow::paintEvent(QPaintEvent *)
    3. {
    4. QPainter painter(this);
    5. paintRoad(&painter);
    6. drawCar(&painter);
    7. }
    8. //绘制地图
    9. void MainWindow::paintRoad(QPainter *painter)
    10. {
    11. //QPainter painter(this);
    12. painter->setPen(QPen(Qt::blue,2, Qt::SolidLine, Qt::RoundCap));//设置画笔形式
    13. for(int i = 0; i < m_pointArray.count(); i ++)
    14. {
    15. if (i < 1)
    16. {
    17. continue;
    18. }
    19. painter->drawLine(m_pointArray[i-1],m_pointArray[i]);
    20. }
    21. }
    22. //绘制小车
    23. void MainWindow::drawCar(QPainter *painter)
    24. {
    25. if(m_pointArray.count() == 0)
    26. {
    27. return;
    28. }
    29. painter->setPen(QPen(Qt::red, 2, Qt::SolidLine, Qt::RoundCap));
    30. if (car_pos >= m_pointArray.count())
    31. {
    32. car_pos = m_pointArray.count() -1;
    33. }
    34. painter->drawRect(m_pointArray[car_pos].x() - Car_Radius,m_pointArray[car_pos].y() - Car_Radius,
    35. Car_Radius*2,Car_Radius*2);
    36. update();
    37. }

  • 相关阅读:
    恒生电子面试经验
    基于Python的ArcGIS流程化数据处理及应用开发
    树莓派等Linux开发板上使用 SSD1306 OLED 屏幕,bullseye系统 ubuntu,debian
    空间数据结构管理---RTree(上篇)
    【Unity】实现轮盘抽奖
    C/C++数据结构课程设计安排
    25考研数据结构复习·3.1栈·顺序栈·链栈
    哈希表的实现(哈希捅)
    【Verilog】Verilog设计进阶
    linux安装切换图形化界面?
  • 原文地址:https://blog.csdn.net/linlin003/article/details/132672481