1
1

mainwindow.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QPainter>
  4. #include <QTimer>
  5. MainWindow::MainWindow(QWidget *parent)
  6. : QMainWindow(parent)
  7. , ui(new Ui::MainWindow)
  8. {
  9. ui->setupUi(this);
  10. // setMinimumSize(simulator.size * 40, simulator.size * 40);
  11. simulator.loadProgram(Qt::red, 10, 10);
  12. simulator.loadProgram(Qt::blue, 15, 15);
  13. QTimer* timer = new QTimer(this);
  14. connect(timer, &QTimer::timeout, this, [this](){
  15. simulator.simulate();
  16. repaint();
  17. });
  18. timer->start(50);
  19. }
  20. MainWindow::~MainWindow()
  21. {
  22. delete ui;
  23. }
  24. void MainWindow::paintEvent(QPaintEvent* event) {
  25. QPainter painter(this);
  26. int w = qMin(width(), height()) / simulator.size;
  27. int h = qMin(width(), height()) / simulator.size;
  28. for(int y = 0; y < simulator.size; ++y) {
  29. for(int x = 0; x < simulator.size; ++x) {
  30. int xx = x * w;
  31. int yy = y * w;
  32. painter.setPen(Qt::black);
  33. painter.setBrush(Qt::gray);
  34. painter.drawRect(QRect(xx, yy,w, h));
  35. }
  36. }
  37. for (auto& program : simulator.programs) {
  38. int xx = program.position.x * w;
  39. int yy = program.position.y * w;
  40. painter.setPen(Qt::black);
  41. painter.setBrush(program.color);
  42. QRect rect(xx, yy,w, h);
  43. painter.drawRect(rect);
  44. auto& taskIndex = program.taskIndex;
  45. if(program.tasks.empty()) {
  46. continue;
  47. }
  48. taskIndex += 1;
  49. taskIndex %= program.tasks.size();
  50. if (taskIndex < program.tasks.size()) {
  51. auto& task = program.tasks[taskIndex];
  52. switch(task.direction) {
  53. case Right: painter.drawLine(rect.center(), QPoint(rect.right(), rect.center().y())); break;
  54. case Down: painter.drawLine(rect.center(), QPoint(rect.center().x(), rect.bottom())); break;
  55. case Left: painter.drawLine(rect.center(), QPoint(rect.left(), rect.center().y())); break;
  56. case Up: painter.drawLine(rect.center(), QPoint(rect.center().x(), rect.top())); break;
  57. }
  58. painter.drawText(rect, QString("%1:%2:%3").arg(program.banks.size()).arg(task.bankIndex).arg(task.instIndex));
  59. }
  60. }
  61. }