QThread和Phonon

时间:2013-01-30 14:45:20

标签: qt4 qthread phonon

我正在使用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库并播放音频文件。

是否有任何建议或示例代码?

1 个答案:

答案 0 :(得分:1)

把这个

QCoreApplication::setApplicationName( "phonon" );

在创建媒体对象之前的代码上面