Code Qt/C++ de l'application qui a servie lors de IEF 2022.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

126 lignes
3.1 KiB

  1. // Code de la classe Loterie
  2. // #include <QWidgets>
  3. #include <QtGlobal>
  4. #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
  5. # include <QtWidgets>
  6. #else
  7. # include <QtGui>
  8. #endif
  9. #include "Loterie.h"
  10. Loterie::Loterie(int Taille, QWidget *parent) : QWidget(parent)
  11. {
  12. taille = Taille;
  13. dep=30;
  14. savsec=-1;
  15. QTimer *monTimer = new QTimer(this);
  16. // monTimer->setTimerType(Qt::PreciseTimer);
  17. connect(monTimer, SIGNAL(timeout()), this, SLOT(update()));
  18. monTimer->start(1000); // Timeout toutes les secondes
  19. setWindowTitle(tr("Loterie E2L"));
  20. resize(taille, taille);
  21. }
  22. void Loterie::lance(void)
  23. {
  24. dep=30;
  25. savsec++;
  26. }
  27. void Loterie::paintEvent(QPaintEvent *)
  28. {
  29. int x = (taille/2) - 4;
  30. // Les polygones (aiguille)
  31. // On suppose que l'origine est au centre !!
  32. static const QPoint AigS[4] = {
  33. QPoint(2, 2),
  34. QPoint(0,4),
  35. QPoint(-2, 2),
  36. QPoint(0, 10-x)
  37. };
  38. // Quelques couleurs predefinies
  39. QColor HCoul(255, 0, 0);
  40. QColor ACoul(250, 0, 250);
  41. QColor MCoul(250, 250, 0);
  42. QColor SCoul(150, 150, 150);
  43. // QColor SCoul(52, 152, 219);
  44. QColor XCoul(152, 219, 52);
  45. QPainter painter(this); // Espace du dessin
  46. painter.setRenderHint(QPainter::Antialiasing); // Meilleure image
  47. int cote = qMin(width(), height());
  48. painter.translate(width() / 2, height() / 2); // changt origine
  49. painter.scale(cote / (double)taille, cote / (double)taille);
  50. painter.setPen(Qt::NoPen);
  51. painter.setBrush(HCoul);
  52. // Marques des quartiers de la roue
  53. for (int i = 0; i < 30; ++i) {
  54. if ((i % 6) == 0) {
  55. if (i==0) painter.setBrush(HCoul);
  56. else painter.setBrush(ACoul);
  57. } else {
  58. if ((i % 2) == 0) painter.setBrush(XCoul);
  59. else painter.setBrush(MCoul);
  60. }
  61. // painter.fillRect(-x,0,x,x, Qt::green);
  62. QRectF rectangle(-x, -x, 2*x, 2*x);
  63. int startAngle = 84 * 16;
  64. int spanAngle = 12 * 16;
  65. painter.drawPie(rectangle, startAngle, spanAngle);
  66. painter.rotate(12.0);
  67. }
  68. // Marques des minutes du cadran
  69. painter.setPen(SCoul);
  70. for (int j = 0; j < 60; ++j) {
  71. painter.drawLine(x-4, 0, x, 0);
  72. painter.rotate(6.0);
  73. }
  74. // Texte de fond
  75. painter.setPen(Qt::blue);
  76. painter.setFont(QFont("Arial", 30));
  77. QRectF rectT(-x, -x, 2*x, 2*x);
  78. painter.drawText(rectT,Qt::AlignCenter,"E2L\nLoterie\n\nIvry en Fete\n2025");
  79. QTime Heure = QTime::currentTime();
  80. int coef=1;
  81. int nsec, sec;
  82. if (savsec==-1) sec = Heure.second();
  83. else sec = savsec;
  84. if (dep > 0) {
  85. if (dep > 15) coef=5;
  86. else {
  87. if (dep > 10) coef=3;
  88. else {
  89. if (dep > 5) coef=2;
  90. }
  91. }
  92. nsec = sec + coef;
  93. while (nsec > 59) nsec -= 60;
  94. savsec=nsec;
  95. dep--;
  96. // if (dep==0) printf("val = %d\n",nsec);
  97. painter.fillRect(x-10,x-10,x,x, Qt::red);
  98. } else {
  99. nsec = savsec;
  100. }
  101. // Aiguille
  102. painter.setPen(Qt::black);
  103. painter.setBrush(SCoul);
  104. painter.save();
  105. painter.rotate(6.0 * (nsec + .5));
  106. painter.drawConvexPolygon(AigS, 4);
  107. painter.restore();
  108. }