Проигрываем mp3 из ресурсов в QT4 и QT5

При переходе из QT4 на QT5 была сломана обратная совместимость при проигрывании звука — был убран модуль phonon, вместо него предлагается модуль multimedia. Для того чтобы код работал и «там и там», можно воспользоваться следующим вариантом.

*.pro:

QT+= core \
    gui \
    network \
    widgets 
lessThan (QT_MAJOR_VERSION, 5): QT += phonon
greaterThan (QT_MAJOR_VERSION, 5): QT += multimedia multimediawidgets

*.h:

...
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
 #include <Phonon/MediaObject>
 #include <Phonon/AudioOutput>
#endif
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
    #include <QMediaPlayer>
    #include <QDir>
    #include <QUrl>
#endif
...

*.cpp:

....
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
        qDebug() << "Через Phonon";
        Phonon::MediaObject *music =
        Phonon::createPlayer(Phonon::MusicCategory,Phonon::MediaSource(QUrl("qrc:/sounds/Sound_21009.mp3")));
         music->play();
#endif
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
         qDebug() << "Через QMediaPlayer";
         QMediaPlayer *player = new QMediaPlayer;
         player->setMedia(QUrl("qrc:/sounds/Sound_21009.mp3"));
         player->setVolume(100);
         player->play();
#endif
...

Получите 52мб файлов для простой программы на QT

И вот настал час Х — после разработки приложения в QT Creator вы готовы попробовать запустить исполняемый файл на другом компьютере. Да или просто запустить файл вне QT Creator. И получите ОЙ. Ибо приложение тащит за собой кучу DLL библиотек. Какие именно нужны библиотеки, можно выяснить при помощи инструмента windeployqt.exe, которая поставляется вместе с QT Creator.

Запустив его так:

windeployqt.exe c:\sbssalert\sbssalert.exe

программа скопирует в папку приложения, все необходимые для работы DLL библиотеки. У меня их оказалось 52мб.

Есть конечно способ собрать всё в один exe файл, но для этого требуется очень много телодвижений — нужно из исходников QT Cretator перекомпилировать сам QT Creator . У меня это не получилось.

Эх…

Ошибка после обновления VirtualBox

После обновления VirtualBox стала выскакивать ошибка:

RTR3InitEx failed with rc=-1912 (rc=-1912)

Фактически это означает, человеческим языком, что пакет virtualbox-dkms остался от старой версии. Удалим:

sudo apt remove virtualbox-dkms

Соберем новый:

sudo /sbin/vboxconfig

Воспроизведение mp3 из ресурса QT

Сначала необходимо добавить ресурс (правая кнопка мыши по проекту -> QT -> добавить ресурс):

Далее воспроизводим:

#include <Phonon/MediaObject>

void Form1::SoundPlay(){

    Phonon::MediaObject *music =
    Phonon::createPlayer(Phonon::MusicCategory,
                              Phonon::MediaSource(QUrl("qrc:/sounds/01009.mp3")));
     music->play();
}

 

Жизнь замечательных грибов