Phonon :: Path和Phonon ::即使它们被破坏,效果也会继续有效

时间:2012-02-28 13:56:14

标签: c++ qt phonon

请考虑以下代码。

class MainWindow
{
    // ...
    Phonon::MediaObject media;
    Phonon::AudioOutput audio_output;
};

MainWindow::MainWindow() : audio_output(MusicCategory)
{
    //...

    QList<EffectDescription> effects =
                          BackendCapabilities::availableAudioEffects();

    media.setCurrentSource(MediaSource("../test.wma"));
    Path path = createPath(&media, &audio_output);
    Q_ASSERT(path.isValid());

    if (!effects.isEmpty())
    {
        path.insertEffect(effects[2]);
    }

    media.play();

    qDebug() << "Playing...";
}

构造函数返回后,patheffects将被销毁。我注意到media即使应用了效果(effects[2])也会继续播放。

我想我错过了什么。即使patheffects被销毁,media如何继续发挥?

1 个答案:

答案 0 :(得分:1)

正如Path::~Path documentation所说:

  

销毁对Path的引用。如果路径有效,则连接不会中断,因为源和接收器MediaNodes仍然保留对路径的引用。

这意味着路径更像是句柄,而不是遵循RAII原则。 你必须明确地调用disconnect()来破坏连接。