Я пишу приложение с графическим интерфейсом C++, используя Qt Creator (на основе 32-разрядной версии QT 4.8.0). Моя цель — создать приложение, которое воспроизводит звуки природы случайным образом, с различными атрибутами для каждого звука. Я пытаюсь использовать библиотеку Phonon для воспроизведения этих звуков.
У меня есть класс ZooKeeper, который наследуется от общедоступного QThread. У этого класса есть основная работающая функция, которая зацикливается:
while(true)
{
ManageCritters();
QThread::msleep(10);
}
Внутри функции ManageCritters();
я проигрываю звуковые файлы на основе имени файла, характерного для конкретного животного в данный момент времени. Вот как я его выполняю:
// create our media objects and an audio-output
Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
Phonon::AudioOutput *autioOut = new Phonon::AudioOutput(Phonon::MusicCategory, this);
// link the two together
Phonon::createPath(mediaObject, audioOut);
// set our audio source to the filename we want to play
mediaObject->setCurrentSource(filename);
// play the audio file
mediaObject->play();
Все это компилируется просто отлично, однако я получаю ошибку времени выполнения:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QThread(0x82c7e48), parent's thread is QThread(0x8166ee8), current thread is QThread(0x82c7e48)
WARNING: Phonon needs QCoreApplication::applicationName to be set to export audio output names through the DBUS interface
KGlobal::locale() must be called from the main thread before using i18n() in threads. KApplication takes care of this. If not using KApplication, call KGlobal::locale() during initialization.
The program has unexpectedly finished.
Похоже, я не понимаю, как настроить воспроизведение звука в QThreads, но я не вижу, где возникает ошибка и как ее исправить.
Должен ли я иметь другую настройку для обработки аудиовоспроизведения? Это все ООП. У меня есть еще один класс под названием Critter()
, который представляет отдельное существо (жука, птицу и т. д.). В идеале я хотел бы, чтобы каждый «тварь» обрабатывал собственное воспроизведение звука (сделайте воспроизведение звука функцией класса Critter()
). Но я не уверен, как заставить этот класс Critter()
ссылаться на библиотеку Phonon и воспроизводить аудиофайлы.
Есть ли какие-либо предложения или пример кода?