我正在使用Qt Creator编写一个C ++ GUI应用程序(基于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中设置音频播放,但我不知道错误发生的位置,也不知道如何修复它。
我是否应该使用不同的设置来处理音频播放?这都是OOP。我确实有另一个名为Critter()
的类,它代表一个单独的生物(虫子,鸟等)。理想情况下,我希望每个"小动物"处理自己的音频播放(使音频播放Critter()
类的功能)。但我不知道如何让这个Critter()
类链接到Phonon库并播放音频文件。
是否有任何建议或示例代码?
答案 0 :(得分:1)
把这个
QCoreApplication::setApplicationName( "phonon" );
在创建媒体对象之前的代码上面