1

次のコードを検討してください。

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...";
}

コンストラクターが戻った後、はpath破棄effectsされます。mediaエフェクトをかけても()が再生され続けることに気づきましたeffects[2]

私は何かを逃したと思います。pathとが破壊されたとしてもeffects、どのようmediaにプレイを続けますか?

4

1 に答える 1

1

パス::〜パスのドキュメントにあるように:

パスへのこの参照を破棄します。パスが有効であった場合、ソースとシンクの両方のMediaNodeが引き続きパスへの参照を保持するため、接続は切断されません。

つまり、パスはRAIIの原則に従うというよりもハンドルに似ています。接続を破棄するには、disconnect()を明示的に呼び出す必要があります。

于 2012-02-28T22:21:35.117 に答える