Как воспроизвести звук перед выплеском в QT? - PullRequest
2 голосов
/ 13 октября 2019

Я хочу воспроизвести звук внутри заставки, но с помощью следующего кода заставка появляется, и только после исчезновения заставки воспроизводится звук. Кто-нибудь может мне помочь? Большое спасибо.

    QApplication a(argc, argv);

    QMediaPlayer * splashSound = new QMediaPlayer;
    splashSound->setMedia(QUrl("qrc:/sfx/splash_sound.wav"));
    splashSound->play();

    QSplashScreen * mainSplash = new QSplashScreen;
    mainSplash->setPixmap(QPixmap(":/img/splash.png"));
    mainSplash->show();

    MainWindow w;

    QTimer::singleShot(2500, mainSplash, SLOT(close()));
    QThread::msleep(2500);

    w.show();

    return a.exec();

1 Ответ

2 голосов
/ 13 октября 2019

Проблема в вашем звонке на QThread::msleep(2500);он предотвращает выполнение цикла событий Qt (потому что a.exec() не может работать до тех пор, пока он не вернется), и это, в свою очередь, препятствует воспроизведению звука.

Простое решение - удалить эту строку и вызовна w.show() и замените их на что-то вроде этого:

QTimer::singleShot(2500, &w, SLOT(show()));

... Это приведет к тому, что ваш виджет MainWindow появится одновременно с исчезновением заставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...