2012-02-28 67 views
1

請考慮以下代碼。Phonon :: Path and 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

Path::~Path documentation說:

銷燬此參考路徑。如果路徑有效,則連接不會中斷,因爲源節點和接收節點仍然保留對路徑的引用。

這意味着路徑更像是處理比下面的RAII原則。 你必須明確地調用disconnect()來銷燬連接。

相關問題