Phonon  4.7.0
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Pages

Overview | Phonon4Qt5

Phonon4Qt5, as the name suggets, is a version of the Phonon 4 library built against Qt5 rather than Qt4.

It has the same API as a Phonon built against Qt4, but differs in ABI and file names. This allows development and/or delpoyment of your application to happen against either version of Qt.


To build Phonon4Qt5 you will have to pass PHONON_BUILD_PHONON4QT5 to CMake to switch it into Qt5 build mode.

Additionally if you are building against a qt-project provided binary build of Qt5 you may have to define the CMAKE_PREFIX_PATH to make CMake find Qt5. If you are using QMake for your application you will additionally have to instruct cmake to install Qt extensions into the actual Qt directory using PHONON_INSTALL_QT_EXTENSIONS_INTO_SYSTEM_QT.

For example:

mkdir build5
cd build5

Phonon4Qt5 installation does not conflict with regular Phonon installations in any way; It uses different file and folder names for everything installed.


Except for a couple of lines in CMake, using Phonon4Qt5 is identical to using Phonon.


To check for Phonon4Qt5 in your CMake project simply use find_package. Variables other than *_FOUND variable will have a generic PHONON prefix making it easier to support both versions without excessive if/else blocks.

find_package(Phonon4Qt5 REQUIRED)
find_package(Phonon REQUIRED)
# These are present regardless of which path was chosen
message("${PHONON_LIBRARY} contains the path to libphonon4qt5 or libphonon")
message("${PHONON_INCLUDE_DIR} contains the phonon4qt5 or phonon include directory")
While you were able to get away with not adding PHONON_INCLUDE_DIR to CMake's include_directories on various Unix systems, this will not work with Phonon4Qt5; It is using nested directories to achieve 100 % source compatibility with Phonon, so your compiler will not be able to find phonon/* includes by simply looking in standard paths.


To use Phonon4Qt5 in your QMake project you can simply use:

QT += phonon4qt5

QMake will take care of everything else. Except in certain situations QMake will not be able to find the files necessary to enable a phonon4qt5 build, building phono4qt5 with PHONON_INSTALL_QT_EXTENSIONS_INTO_SYSTEM_QT, as explained above, should prevent this from happening.


For the actual code there is absolutely no difference between Phonon and Phonon4Qt5.

Consequently the following code example will work with either version:

#include <QUrl>
#include <phonon/MediaSource>
int main()
QUrl url("file:///home/user/firefly.webm");
Phonon::MediaSource source(url);
if (!source.isValid())
return 1;
return 0;