我試圖爲實時音頻應用程序實現雙緩衝區,而QAudioInput
要求它是QIODevice
的子類。我發現這個方法的文檔很混亂。實現QIODevice :: writeData,令人困惑的文檔
首先,文檔中的方法簽名與QT 5.9.2(具有virtual qint64 writeData(const char *data, qint64 len) = 0;
)的標頭不匹配。
的文檔有簽名,但:qint64 QIODevice::writeData(const char *data, qint64 maxSize)
的maxSize
參數混淆了我,因爲這意味着我可以只緩存一些數據,該文件還暗示:
寫入速度達從數據到設備的
maxSize
字節。返回寫入的字節數,如果發生錯誤,則返回-1
。
然而,立即後記文檔說,這,這似乎是矛盾的對我說:
當重新實現這個功能是非常重要的,這個函數將返回所有之前可用的數據。爲了使
QDataStream
能夠在課堂上進行操作,這是必需的。QDataStream
假定所有信息都已寫入,因此如果出現問題,則不會重新寫入。
所以我QIODevice
執行負責單個呼叫或沒有緩衝所有的數據?
更改參數的名稱對函數的簽名沒有影響。或者是虛擬的打擾你? – user463035818
不錯的發現! :] [QDataStream]的當前實現(http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdatastream.cpp)似乎不使用'writeData'。 – bezet
這是參數名稱的含義擾亂了我。對我來說,maxSize意味着我不需要寫出所有的數據,而len沒有任何含義。結合我想要澄清的混淆文檔。 –