我正在使用 Qt Creator(基于 32 位 QT 4.8.0)编写 C++ GUI 应用程序。我的目标是创建一个随机播放自然声音的应用程序,每种声音都有不同的属性。我正在尝试使用 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 库并播放音频文件。
有什么建议或示例代码吗?