qt montre une image pendant 1/4 de seconde

Hé, j’ai essayé à plusieurs resockets d’achever cette opération en utilisant usleep ou qt sleep lorsque je montrais une image, mais parfois (presque à chaque fois), elle apparaît en blanc au lieu de l’image
En gros, je veux qu’il accepte n’importe quelle entrée pour dire que je suis prêt, alors je montrerai une image aléatoire numérotée de 1 à 28 dans un intervalle de temps aléatoire de 1,5 à 3 secondes, puis je la montrerai pendant 250 millisecondes, puis je cacherai et j’attendrai l’image de 3sec. répéter. Je suis sur debian, g ++;
Merci d’avance.

int getRandInt(int x){ return rand() % x; } class I : public QThread { public: static void sleep(unsigned long secs) { QThread::msleep(secs); } }; QApplication app(argc, argv); std::ossortingngstream oss; oss << "images/" << getRandInt(28) << ".jpg"; std::cout << oss.str(); QString qstr = QString::fromStdString(oss.str()); QPixmap pixmap(qstr); QPixmap pixmap2(qstr); QSplashScreen splash(pixmap); QSplashScreen splash2(pixmap2); QMainWindow mainWin; while(1==1){ splash.show(); splash.showMessage(QObject::tr("test"), Qt::AlignLeft | Qt::AlignTop, Qt::black); app.processEvents(); I::sleep(250); splash.finish(0); splash.raise(); I::sleep(2*1000); splash2.show(); splash2.showMessage(QObject::tr("test"),Qt::AlignLeft | Qt::AlignTop, Qt::black); app.processEvents(); I::sleep(5000);splash2.finish(&mainWin);splash2.raise(); } 

Comprendre que “montrer une image aléatoire numérotée 1-28 dans un temps aléatoire compris entre 1,5 et 3 secondes puis le montrer pendant 250 millisecondes” signifie “montrer une image aléatoire numérotée 1-28 dans un temps aléatoire compris entre 1,75 et 3,25”, ci-dessous le fait.

Le code nécessite Qt 5.x et un compilateur C ++ 11. J’ai essayé de mettre en évidence l’utilisation correcte des fonctionnalités de nombre pseudo-aléatoire C ++ 11. Je ne connais pas l’utilisation finale de votre code, mais si vous std::mt19937_64 par random_engine , il serait suffisant pour mener des recherches psychologiques en ce qui concerne le hasard.

Les images présentées sont tirées au hasard parmi un ensemble de 28 images. Chacune des images sources est également générée aléatoirement.

Notez l’absence évidente de toute forme de sumil ou de boucle occupée et d’utilisation zélée de lambdas. Ce code ne serait pas plus court s’il avait été écrit en Python. C’est ce que C ++ 11 vous achète: la concision, entre autres 🙂

 #include  #include  #include  #include  #include  #include  #include  #include  typedef std::default_random_engine random_engine; QImage randomImage(int size, random_engine & rng) { QImage img(size, size, QImage::Format_ARGB32_Premultiplied); img.fill(Qt::white); QPainter p(&img); p.setRenderHint(QPainter::Antialiasing); int N = std::uniform_int_dissortingbution<>(25, 200)(rng); std::uniform_real_distribution<> dP(0, size); std::uniform_int_dissortingbution<> dC(0, 255); QPointF pt1(dP(rng), dP(rng)); for (int i = 0; i < N; ++i) { QColor c(dC(rng), dC(rng), dC(rng)); p.setPen(QPen(c, 3)); QPointF pt2(dP(rng), dP(rng)); p.drawLine(pt1, pt2); pt1 = pt2; } return img; } int main(int argc, char *argv[]) { QApplication a(argc, argv); std::random_device rd; random_engine gen(rd()); int imageSize = 300; QList images; for (int n = 0; n < 28; ++n) images << randomImage(imageSize, gen); std::uniform_int_distribution<> dImage(0, images.size()-1); QStackedWidget display; QPushButton ready("I'm Ready!"); QLabel label, labelHidden; display.addWidget(&ready); display.addWidget(&label); display.addWidget(&labelHidden); QTimer splashTimer; QStateMachine machine; QState s1(&machine), s2(&machine), s3(&machine), s4(&machine); splashTimer.setSingleShot(true); QObject::connect(&s1, &QState::entered, [&]{ display.setCurrentWidget(&ready); ready.setDefault(true); ready.setFocus(); }); s1.addTransition(&ready, "clicked()", &s2); QObject::connect(&s2, &QState::entered, [&]{ label.setPixmap(QPixmap::fromImage(images.at(dImage(gen)))); display.setCurrentWidget(&label); splashTimer.start(250 + std::uniform_int_dissortingbution<>(1500, 3000)(gen)); }); s2.addTransition(&splashTimer, "timeout()", &s3); QObject::connect(&s3, &QState::entered, [&]{ display.setCurrentWidget(&labelHidden); splashTimer.start(2000); }); s3.addTransition(&splashTimer, "timeout()", &s4); QObject::connect(&s4, &QState::entered, [&]{ display.setCurrentWidget(&label); splashTimer.start(3000); }); s4.addTransition(&splashTimer, "timeout()", &s1); machine.setInitialState(&s1); machine.start(); display.show(); return a.exec(); }