mainwindow.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "playfield.h"
  4. MainWindow::MainWindow(QWidget *parent)
  5. : QMainWindow(parent)
  6. , ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. lblCycles = new QLabel(ui->statusBar);
  10. ui->statusBar->addWidget(lblCycles);
  11. // setMinimumSize(simulator.size * 40, simulator.size * 40);
  12. simulator.loadProgram(Qt::red, 10, 10);
  13. simulator.loadProgram(Qt::blue, 15, 15);
  14. ui->centralWidget->layout()->addWidget(new Playfield(simulator, ui->centralWidget));
  15. auto timerRepaint = new QTimer(this);
  16. connect(timerRepaint, &QTimer::timeout, this, [this](){
  17. mutex.lock();
  18. repaint();
  19. lblCycles->setText(QString(tr("Cycles: %1")).arg(simulator.cycle));
  20. mutex.unlock();
  21. });
  22. timerRepaint->start(200);
  23. connect(timer, &QTimer::timeout, this, [this](){
  24. simulate();
  25. });
  26. connect(ui->actionStart, &QAction::triggered, this, [this](){
  27. timer->start(1);
  28. });
  29. connect(ui->actionPause, &QAction::triggered, this, [this](){
  30. timer->stop();
  31. });
  32. connect(ui->actionSingleStep, &QAction::triggered, this, [this](){
  33. timer->stop();
  34. simulate();
  35. });
  36. }
  37. MainWindow::~MainWindow()
  38. {
  39. delete ui;
  40. }
  41. void MainWindow::simulate()
  42. {
  43. mutex.lock();
  44. simulator.simulate();
  45. mutex.unlock();
  46. }