Code Qt/C++ de l'application qui a servie lors de IEF 2022.
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

126 wiersze
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. }