The QIODevice 類是 Qt 中所有 I/O 設備的基接口類。 更多...
| 頭: | #include <QIODevice> |
| qmake: | QT += core |
| 繼承: | QObject |
| 繼承者: | QBuffer , QFileDevice ,和 QProcess |
注意: 此類的所有函數 可重入 .
| flags | OpenMode |
| enum | OpenModeFlag { NotOpen, ReadOnly, WriteOnly, ReadWrite, ..., ExistingOnly } |
| QIODevice () | |
| QIODevice (QObject * parent ) | |
| virtual | ~QIODevice () |
| virtual bool | atEnd () const |
| virtual qint64 | bytesAvailable () const |
| virtual qint64 | bytesToWrite () const |
| virtual bool | canReadLine () const |
| virtual void | close () |
| void | commitTransaction () |
| int | currentReadChannel () const |
| int | currentWriteChannel () const |
| QString | errorString () const |
| bool | getChar (char * c ) |
| bool | isOpen () const |
| bool | isReadable () const |
| virtual bool | isSequential () const |
| bool | isTextModeEnabled () const |
| bool | isTransactionStarted () const |
| bool | isWritable () const |
| virtual bool | open (QIODevice::OpenMode mode ) |
| QIODevice::OpenMode | openMode () const |
| qint64 | peek (char * data , qint64 maxSize ) |
| QByteArray | peek (qint64 maxSize ) |
| virtual qint64 | pos () const |
| bool | putChar (char c ) |
| qint64 | read (char * data , qint64 maxSize ) |
| QByteArray | read (qint64 maxSize ) |
| QByteArray | readAll () |
| int | readChannelCount () const |
| qint64 | readLine (char * data , qint64 maxSize ) |
| QByteArray | readLine (qint64 maxSize = 0) |
| virtual bool | reset () |
| void | rollbackTransaction () |
| virtual bool | seek (qint64 pos ) |
| void | setCurrentReadChannel (int channel ) |
| void | setCurrentWriteChannel (int channel ) |
| void | setTextModeEnabled (bool enabled ) |
| virtual qint64 | size () const |
| qint64 | skip (qint64 maxSize ) |
| void | startTransaction () |
| void | ungetChar (char c ) |
| virtual bool | waitForBytesWritten (int msecs ) |
| virtual bool | waitForReadyRead (int msecs ) |
| qint64 | write (const char * data , qint64 maxSize ) |
| qint64 | write (const char * data ) |
| qint64 | write (const QByteArray & byteArray ) |
| int | writeChannelCount () const |
| void | aboutToClose () |
| void | bytesWritten (qint64 bytes ) |
| void | channelBytesWritten (int channel , qint64 bytes ) |
| void | channelReadyRead (int channel ) |
| void | readChannelFinished () |
| void | readyRead () |
| const QMetaObject | staticMetaObject |
| virtual qint64 | readData (char * data , qint64 maxSize ) = 0 |
| virtual qint64 | readLineData (char * data , qint64 maxSize ) |
| void | setErrorString (const QString & str ) |
| void | setOpenMode (QIODevice::OpenMode openMode ) |
| virtual qint64 | writeData (const char * data , qint64 maxSize ) = 0 |
The QIODevice 類是 Qt 中所有 I/O 設備的基接口類。
QIODevice 為支持數據塊讀寫的設備提供公共實現和抽象接口,譬如 QFile , QBuffer and QTcpSocket . QIODevice 是抽象的且不可以被實例化,但通常使用它定義的接口以提供設備無關 I/O 特徵。例如,Qt 的 XML 類運轉於 QIODevice 指針,允許它們與各種設備 (譬如:文件和緩衝) 一起使用。
在訪問設備之前, open () 必須被調用以設置正確 OpenMode (譬如 ReadOnly or ReadWrite )。然後,可以寫入設備采用 write () 或 putChar (),和讀取通過調用 read (), readLine (),或 readAll ()。調用 close (),當設備用完時。
QIODevice 分 2 種類型的設備:隨機訪問設備和順序設備。
可以使用 isSequential () 確定設備類型。
QIODevice 發射 readyRead () 當有新數據可供讀取時;例如,若新數據到達網絡,或額外數據被追加到正讀取的文件中。可以調用 bytesAvailable () 以確定目前可供讀取的字節數。常用 bytesAvailable () 連同 readyRead () 信號當采用異步設備編程時,譬如 QTcpSocket ,數據片段可以在任意時間點到達。 QIODevice 發射 bytesWritten () 信號,每當把數據負載寫入設備時。使用 bytesToWrite () 以確定當前等待寫入的數據量。
某些子類化的 QIODevice ,譬如 QTcpSocket and QProcess , 是異步的。這意味著 I/O 函數,譬如 write () 或 read () 總是立即返迴,而與設備本身的通信則可能發生,當控製返迴給事件循環時。 QIODevice 提供的函數允許強製立即履行這些操作,同時阻塞調用綫程且不進入事件循環。這允許 QIODevice 子類在沒有事件循環的情況下 (或在單獨綫程中) 使用:
從主 GUI 綫程調用這些函數可能導緻用戶界麵被凍結。範例:
QProcess gzip; gzip.start("gzip", QStringList() << "-c"); if (!gzip.waitForStarted()) return false; gzip.write("uncompressed data"); QByteArray compressed; while (gzip.waitForReadyRead()) compressed += gzip.readAll();
通過子類化 QIODevice ,可以為自己的 I/O 設備提供相同接口。子類化的 QIODevice 隻要求實現保護 readData () 和 writeData () 函數。 QIODevice 使用這些函數以實現其所有方便函數,譬如 getChar (), readLine () 和 write (). QIODevice 還為您處理訪問控製,所以可以安全地假定設備以寫入模式打開,若 writeData () 被調用。
某些子類,譬如 QFile and QTcpSocket ,使用內存緩衝實現數據的中間體存儲。這減少瞭要求設備的訪問調用 (經常非常慢) 數。緩衝使函數像 getChar () 和 putChar () 很快,因為它們可以運轉於內存緩衝,而不是直接運轉於設備本身。不管怎樣,某些 I/O 操作不能很好的操控緩衝。例如,若多個用戶打開同一設備並逐字符讀取,它們最終可能讀取相同數據,當它們打算讀取各單獨組塊時。齣於此原因, QIODevice 允許繞過任何緩衝通過將 Unbuffered 標誌傳遞給 open ()。當子類化 QIODevice ,記得繞過可以使用的任何緩衝,當設備以 Unbuffered 模式打開時。
通常,來自異步設備的傳入數據流是碎片化的,且數據組塊可以在任意時間點到達。要處理數據結構的不完整讀取,使用事務機製實現通過 QIODevice 。見 startTransaction () 和相關函數瞭解更多細節。
某些順序設備支持憑藉多個通道的通信。這些通道錶示擁有獨立順序交付特性的單獨數據流。設備被打開後,就可以確定通道數通過調用 readChannelCount () 和 writeChannelCount () 函數。要在通道之間切換,調用 setCurrentReadChannel () 和 setCurrentWriteChannel () 分彆。 QIODevice 還提供額外信號以處理基於每通道的異步通信。
另請參閱 QBuffer , QFile ,和 QTcpSocket .
此枚舉用於 open () 以描述設備被打開的模式。它也被返迴由 openMode ().
| 常量 | 值 | 描述 |
|---|---|---|
QIODevice::NotOpen
|
0x0000
|
設備未打開。 |
QIODevice::ReadOnly
|
0x0001
|
打開設備以供讀取。 |
QIODevice::WriteOnly
|
0x0002
|
打開設備以供寫入。注意,對於文件係統子類 (如 QFile ),此模式隱含 Truncate (截取),除非組閤 ReadOnly (隻讀)、Append (追加) 或 NewOnly。 |
QIODevice::ReadWrite
|
ReadOnly | WriteOnly
|
打開設備以供讀寫。 |
QIODevice::Append
|
0x0004
|
以追加方式打開設備,以便將所有數據寫入 EOF (文件末尾)。 |
QIODevice::Truncate
|
0x0008
|
若可能,會截取設備在它被打開之前。設備的所有早期內容將丟失。 |
QIODevice::Text
|
0x0010
|
當讀取時,把行尾終止符轉換成 \n。當寫入時,把行尾終止符轉換成本地編碼 (例如:用於 Win32 的 \r\n)。 |
QIODevice::Unbuffered
|
0x0020
|
繞過任何設備緩衝。 |
QIODevice::NewOnly
|
0x0040
|
失敗若要打開的文件已存在。創建並打開文件僅當它不存在時。操作係統保證您是創建並打開文件的唯一者。注意,此模式隱含 WriteOnly,且允許與 ReadWrite 組閤。此標誌目前僅影響 QFile 。其它類將來可以使用此標誌,但在此之前,此標誌可以用於任何類除瞭 QFile 可能導緻未定義行為。(從 Qt 5.11 起) |
QIODevice::ExistingOnly
|
0x0080
|
失敗若要打開的文件不存在。此標誌必須與 ReadOnly、WriteOnly 或 ReadWrite 一起指定。注意,將此標誌與 ReadOnly 一起單獨使用是多餘的,因為 ReadOnly 已失敗當文件不存在時。此標誌目前僅影響 QFile 。其它類將來可以使用此標誌,但在此之前,此標誌可以用於任何類除瞭 QFile 可能導緻未定義行為。(從 Qt 5.11 起) |
某些標誌,譬如
Unbuffered
and
Truncate
沒有意義,當用於某些子類時。其中某些限定由子類錶示的設備類型所隱含。在其它情況下,限定可能是由於實現,或可能是通過底層平颱施加;例如,
QTcpSocket
不支持
Unbuffered
模式,且局限在本機 API 以阻止
QFile
從支持
Unbuffered
在 Windows。
OpenMode 類型是 typedef 對於 QFlags <OpenModeFlag>。它存儲 OpenModeFlag 值的 OR 組閤。
構造 QIODevice 對象。
構造 QIODevice 對象采用給定 parent .
[虛擬]
QIODevice::
~QIODevice
()
析構函數是虛擬的,且 QIODevice 是抽象基類。此析構函數不調用 close (),但子類析構函數可能會。若有疑問,調用 close () 之後銷毀 QIODevice .
[signal]
void
QIODevice::
aboutToClose
()
此信號被發射當設備即將關閉時。連接此信號,若需要履行操作在設備關閉之前 (如:若在需要寫入設備的單獨緩衝中有數據)。
[虛擬]
bool
QIODevice::
atEnd
() const
返迴
true
若當前讀寫位置在設備的末端 (即:設備中沒有更多可供讀取的數據);否則返迴
false
.
對於某些設備,atEnd() 可以返迴 true 即使有更多數據要讀取。此特殊情況僅適用於設備生成數據以直接響應調用
read
() (如,
/dev
or
/proc
files on Unix and
macOS
, or console input /
stdin
在所有平颱)。
另請參閱 bytesAvailable (), read (),和 isSequential ().
[虛擬]
qint64
QIODevice::
bytesAvailable
() const
返迴可供讀取的可用字節數。此函數通常用於順序設備,以確定在讀取之前緩衝中分配的字節數。
重實現此函數的子類必須調用基實現為包括緩衝大小對於 QIODevice 。範例:
qint64 CustomDevice::bytesAvailable() const { return buffer.size() + QIODevice::bytesAvailable(); }
另請參閱 bytesToWrite (), readyRead (),和 isSequential ().
[虛擬]
qint64
QIODevice::
bytesToWrite
() const
對於緩衝設備,此函數返迴等待寫入的字節數。對於沒有緩衝的設備,此函數返迴 0。
重實現此函數的子類必須調用基實現為包括緩衝大小對於 QIODevice .
另請參閱 bytesAvailable (), bytesWritten (),和 isSequential ().
[signal]
void
QIODevice::
bytesWritten
(
qint64
bytes
)
此信號發射,每當把數據負載寫入設備的當前寫入通道時。 bytes 自變量是在此負載中寫入的設置字節數。
bytesWritten() 不會遞歸發射;若重新進入事件循環或調用 waitForBytesWritten () 在連接到 bytesWritten() 信號的槽內,信號不會被重新發射 (盡管 waitForBytesWritten () 可能仍返迴 true)。
另請參閱 readyRead ().
[虛擬]
bool
QIODevice::
canReadLine
() const
返迴
true
若可以從設備讀取完整數據行;否則返迴
false
.
注意:沒有辦法確定是否可以讀取的無緩衝設備始終返迴 false。
此函數經常被調用結閤 readyRead () 信號。
重實現此函數的子類必須調用基實現以便包括內容為 QIODevice 的緩衝。範例:
bool CustomDevice::canReadLine() const { return buffer.contains('\n') || QIODevice::canReadLine(); }
另請參閱 readyRead () 和 readLine ().
[signal]
void
QIODevice::
channelBytesWritten
(
int
channel
,
qint64
bytes
)
此信號發射,每當把數據負載寫入設備時。 bytes 自變量設置此負載要寫入的字節數,而 channel 是它們要寫入的通道。不像 bytesWritten (),它被發射不管 當前寫入通道 .
channelBytesWritten() 可以被遞歸發射 - 即使是同一通道。
該函數在 Qt 5.7 引入。
另請參閱 bytesWritten () 和 channelReadyRead ().
[signal]
void
QIODevice::
channelReadyRead
(
int
channel
)
此信號被發射當有新數據可用於從設備讀取時。 channel 自變量設置已到達數據的讀取通道索引。不像 readyRead (),它被發射不管 當前讀取通道 .
channelReadyRead() 可以被遞歸發射 - 即使是同一通道。
該函數在 Qt 5.7 引入。
另請參閱 readyRead () 和 channelBytesWritten ().
[虛擬]
void
QIODevice::
close
()
首先發射 aboutToClose (),然後關閉設備並設置其 OpenMode to NotOpen 。錯誤字符串也會被重置。
另請參閱 setOpenMode () 和 OpenMode .
完成讀取事務。
對於順序設備,在事務期間記錄在內部緩衝的所有數據將被丟棄。
該函數在 Qt 5.7 引入。
另請參閱 startTransaction () 和 rollbackTransaction ().
返迴當前讀取通道的索引。
該函數在 Qt 5.7 引入。
另請參閱 setCurrentReadChannel (), readChannelCount (),和 QProcess .
返迴當前寫入通道的索引。
該函數在 Qt 5.7 引入。
另請參閱 setCurrentWriteChannel () 和 writeChannelCount ().
返迴人類可讀的最後發生的設備錯誤描述。
另請參閱 setErrorString ().
從設備讀取 1 字符並把它存儲在
c
。若
c
為 0,字符被丟棄。返迴
true
當成功時;否則返迴
false
.
另請參閱 read (), putChar (),和 ungetChar ().
返迴
true
若設備是打開的;否則返迴
false
。設備是打開的若可以讀/寫。默認情況下,此函數返迴
false
if
openMode
() 返迴
NotOpen
.
返迴
true
若可以從設備讀取數據;否則返迴 false。使用
bytesAvailable
() 以確定可以讀取多少字節。
這是方便校驗函數若 OpenMode 的設備包含 ReadOnly 標誌。
[虛擬]
bool
QIODevice::
isSequential
() const
返迴
true
若此設備是順序的;否則返迴 false。
與隨機訪問設備相反,順序設備沒有開始、結束、大小或當前位置的概念,且它們不支持尋址。纔可以從設備讀取數據,僅當設備報告數據可用時。順序設備的最常見範例是網絡套接字。在 Unix,特殊文件 (譬如 /dev/zero 和 fifo 管道) 是順序的。
另一方麵,常規文件確實支持隨機訪問。它們擁有大小和當前位置,且它們還支持在數據流中嚮後和嚮前尋址。常規文件是非順序的。
另請參閱 bytesAvailable ().
返迴
true
若
Text
標誌被啓用;否則返迴
false
.
另請參閱 setTextModeEnabled ().
返迴
true
若事務在設備上正在進行中,否則
false
.
該函數在 Qt 5.7 引入。
另請參閱 startTransaction ().
返迴
true
若可以把數據寫入設備;否則返迴 false。
這是方便校驗函數若 OpenMode 的設備包含 WriteOnly 標誌。
[虛擬]
bool
QIODevice::
open
(
QIODevice::OpenMode
mode
)
打開設備並設置其
OpenMode
to
mode
。返迴
true
若成功;否則返迴
false
。應該從 open() 或打開設備的其它函數的任何重實現調用此函數。
返迴設備被打開的模式;即: ReadOnly or WriteOnly .
另請參閱 setOpenMode () 和 OpenMode .
讀取最多 maxSize 字節從設備到 data ,無副作用 (即:若調用 read () 在 peek() 之後,將獲得相同數據)。返迴讀取字節數。若齣現錯誤,譬如:當試圖窺視打開設備以 WriteOnly 模式,此函數返迴 -1。
返迴 0,當沒有更多數據可供讀取時。
範例:
bool isExeFile(QFile *file) { char buf[2]; if (file->peek(buf, sizeof(buf)) == sizeof(buf)) return (buf[0] == 'M' && buf[1] == 'Z'); return false; }
該函數在 Qt 4.1 引入。
另請參閱 read ().
這是重載函數。
窺視最多 maxSize 字節從設備,返迴窺視數據作為 QByteArray .
範例:
bool isExeFile(QFile *file) { return file->peek(2) == "MZ"; }
此函數沒有辦法報告錯誤;返迴空 QByteArray 可能意味著當前沒有數據可供窺視,或發生錯誤。
該函數在 Qt 4.1 引入。
另請參閱 read ().
[虛擬]
qint64
QIODevice::
pos
() const
對於隨機訪問設備,此函數返迴要寫入或讀取數據的位置。對於沒有當前位置概念的順序設備或閉閤設備,返迴 0。
設備的當前讀/寫位置的內部維護由 QIODevice ,因此重實現此函數不必要。當子類化 QIODevice ,使用 QIODevice::seek () 來通知 QIODevice 關於設備位置的變化。
另請參閱 isSequential () 和 seek ().
寫入字符
c
到設備。返迴
true
當成功時;否則返迴
false
.
另請參閱 write (), getChar (),和 ungetChar ().
讀取最多 maxSize 字節從設備到 data ,並返迴讀取字節數。若齣現錯誤,譬如試圖讀取的設備被打開以 WriteOnly 模式,此函數返迴 -1。
返迴 0 當沒有更多可供讀取的數據時。無論如何,認為讀取流的末尾是錯誤的,所以,在此情況 (即:在關閉的套接字上讀取,或在進程已死亡之後讀取) 下,此函數返迴 -1。
另請參閱 readData (), readLine (),和 write ().
這是重載函數。
讀取最多 maxSize 字節從設備,並把讀取數據返迴作為 QByteArray .
此函數沒有辦法報告錯誤;返迴空 QByteArray 可以意味著目前沒有數據可供讀取,或發生錯誤。
從設備讀取所有剩餘數據,並將其作為字節數組返迴。
此函數沒有辦法報告錯誤;返迴空 QByteArray 可以意味著目前沒有數據可供讀取,或發生錯誤。
返迴可用的讀取通道數若設備是打開的;否則返迴 0。
該函數在 Qt 5.7 引入。
另請參閱 writeChannelCount () 和 QProcess .
[signal]
void
QIODevice::
readChannelFinished
()
此信號被發射當關閉此設備的輸入 (讀取) 流時。一檢測到關閉就盡快發齣它,這意味著可能仍有數據可供讀取采用 read ().
該函數在 Qt 4.4 引入。
[pure virtual protected]
qint64
QIODevice::
readData
(
char
*
data
,
qint64
maxSize
)
讀取到 maxSize 字節從設備到 data ,並返迴讀取字節數;返迴 -1 若發生錯誤。
若沒有字節要讀取且從不會有更多字節可用 (範例包括:套接字被關閉、管道被關閉、子進程已完成),此函數返迴 -1。
此函數被調用通過 QIODevice 。重實現此函數,當創建子類為 QIODevice .
當重實現此函數時,此函數在返迴之前讀取所有要求數據是很重要的。這是必需的為 QDataStream 能夠運轉於類。 QDataStream 假定讀取瞭所有請求信息,因此,不會試著讀取 (若存在問題)。
可以在 maxSize 為 0 的情況下調用 此函數,用於履行讀取後操作。
另請參閱 read (), readLine (),和 writeData ().
此函數從設備讀取一行 ASCII 字符,直到最多 maxSize - 1 字節,將字符存儲在 data ,並返迴讀取字節數。若無法讀取一行但未發生錯誤,此函數返迴 0。若發生錯誤,此函數返迴可以讀取的長度,或 -1 若什麼都未讀取。
終止 \0 字節始終被追加到 data ,所以 maxSize 必須大於 1。
讀取數據直到滿足以下任一條件:
例如,以下代碼從文件讀取一行字符:
QFile file("box.txt"); if (file.open(QFile::ReadOnly)) { char buf[1024]; qint64 lineLength = file.readLine(buf, sizeof(buf)); if (lineLength != -1) { // the line is available in buf } }
換行符 \n 包括在緩衝中。若在讀取 maxSize -1 字節之前未遭遇換行符,則不會將換行符插入緩衝。在 Windows,采用 \n 替換換行符。
此函數調用 readLineData (),這的實現是使用重復調用對 getChar ()。可以提供更高效實現通過重實現 readLineData () 在自己的子類中。
另請參閱 getChar (), read (),和 write ().
這是重載函數。
從設備讀取行,但不超過 maxSize 字符,並以字節數組形式返迴結果。
此函數沒有辦法報告錯誤;返迴空 QByteArray 可以意味著目前沒有數據可供讀取,或發生錯誤。
[virtual protected]
qint64
QIODevice::
readLineData
(
char
*
data
,
qint64
maxSize
)
讀取到 maxSize 字符到 data 並返迴讀取的字符數。
此函數被調用通過 readLine (),並提供其基實現,使用 getChar ()。緩衝設備可以改善性能對於 readLine () 通過重實現此函數。
readLine () 追加 \0 字節到 data ;readLineData() 不需要這樣做。
若重實現此函數,小心返迴正確值:它應返迴在這一行中讀取的字節數 (包括終止換行符),或 0 若此時沒有行要讀取。若齣現錯誤,應返迴 -1,當且僅當沒有字節要讀取時。讀取超過 EOF 認為齣錯。
[signal]
void
QIODevice::
readyRead
()
此信號被發射一次,每次有新數據可用於從設備當前讀取通道讀取時。它隻會在新數據可用時再發射一次,譬如:當新網絡數據負載到達網絡套接字時,或當新數據塊被追加到設備時。
readyRead() 不會遞歸發射;若重新進入事件循環或調用 waitForReadyRead () 在連接到 readyRead() 信號的槽內,信號不會被重新發射 (盡管 waitForReadyRead () 可能仍返迴 true)。
注意,開發者實現的類派生自 QIODevice :應始終發射 readyRead() 當有新數據到達時 (不要僅因為緩衝中仍有數據要讀取而發射它)。在其它條件下不要發射 readyRead()。
另請參閱 bytesWritten ().
[虛擬]
bool
QIODevice::
reset
()
尋址隨機訪問設備輸入起始。成功返迴 true;否則返迴
false
(例如:若設備未被打開)。
注意,當使用 QTextStream 在 QFile ,調用 reset() 在 QFile 將不會有期望結果,因為 QTextStream 緩衝文件。使用 QTextStream::seek () 函數代替。
另請參閱 seek ().
迴滾讀取事務。
將輸入流還原到點對於 startTransaction () 調用。此函數常用於迴滾事務,當在提交事務之前檢測到讀取未完成時。
該函數在 Qt 5.7 引入。
另請參閱 startTransaction () 和 commitTransaction ().
[虛擬]
bool
QIODevice::
seek
(
qint64
pos
)
對於隨機訪問設備,此函數將當前位置設為 pos ,返迴 true 當成功時,或 false 若發生錯誤。對於順序設備,默認行為是産生警告並返迴 false。
當子類化 QIODevice ,必須在函數開始時調用 QIODevice::seek() 以確保完整性采用 QIODevice 的內置緩衝。
另請參閱 pos () 和 isSequential ().
設置當前讀取通道為 QIODevice 到給定 channel 。當前輸入通道用於函數 read (), readAll (), readLine (),和 getChar ()。它還確定哪個通道觸發 QIODevice 以發射 readyRead ().
該函數在 Qt 5.7 引入。
另請參閱 currentReadChannel (), readChannelCount (),和 QProcess .
設置當前寫入通道為 QIODevice 到給定 channel 。當前輸齣通道用於函數 write (), putChar ()。它還確定哪個通道觸發 QIODevice 以發射 bytesWritten ().
該函數在 Qt 5.7 引入。
另請參閱 currentWriteChannel () 和 writeChannelCount ().
[protected]
void
QIODevice::
setErrorString
(const
QString
&
str
)
將最後發生的設備錯誤的人類可讀描述設為 str .
另請參閱 errorString ().
[protected]
void
QIODevice::
setOpenMode
(
QIODevice::OpenMode
openMode
)
設置 OpenMode 為設備到 openMode 。調用此函數以設置打開模式,若設備打開後標誌有變化。
若 enabled 為 true,此函數設置 Text 標誌在設備;否則 Text 標誌被移除。此特徵很有用,對於提供自定義行尾處理的類而言在 QIODevice .
IO 設備應被打開,在調用此函數之前。
另請參閱 isTextModeEnabled (), open (),和 setOpenMode ().
[虛擬]
qint64
QIODevice::
size
() const
對於打開的隨機訪問設備,此函數返迴設備的大小。對於打開的順序設備, bytesAvailable () 被返迴。
若設備是關閉的,返迴尺寸不會反映設備的實際大小。
另請參閱 isSequential () 和 pos ().
跳過直到 maxSize 字節從設備。返迴實際跳過字節數,或 -1 當齣錯時。
此函數不等待,且僅丟棄已可供讀取的數據。
若以文本方式打開設備,把行尾終止符轉換成 \n 符號並計為單個字節等同 read () 和 peek () 行為。
此函數適於所有設備,包括順序設備無法 seek ()。它被優化以跳過不想要的數據之後 peek () 調用。
對於隨機訪問設備,skip() 可用於從當前位置嚮前尋址。負數 maxSize 值是不允許的。
該函數在 Qt 5.10 引入。
另請參閱 peek (), seek (),和 read ().
在設備上啓動新的讀取事務。
在讀取操作的序列中,定義可還原點。對於順序設備,讀取數據將在內部被復製,以在讀取不完整的情況下允許還原。對於隨機訪問設備,此函數保存當前位置。調用 commitTransaction () 或 rollbackTransaction () 去完成事務。
注意: 嵌套事務不被支持。
該函數在 Qt 5.7 引入。
另請參閱 commitTransaction () 和 rollbackTransaction ().
放置字符 c 迴到設備,並遞減當前位置除非位置為 0。此函數通常被稱為撤銷 getChar () 操作,譬如:當編寫迴溯剖析器時。
若 c 先前未從設備讀取,行為未定義。
注意: 此函數不可用,當事務正在進行時。
[虛擬]
bool
QIODevice::
waitForBytesWritten
(
int
msecs
)
對於緩衝設備,此函數等待直到緩衝寫入數據負載已寫入設備且 bytesWritten () 信號已發射,或直到 msecs 毫秒已過去。若 msecs 為 -1,此函數不會超時。對於無緩衝設備,會立即返迴。
返迴
true
若數據負載已寫入設備;否則返迴
false
(即:若操作超時或發生錯誤)。
可以在沒有事件循環的情況下操作此函數。它很有用,當編寫非 GUI 應用程序和在非 GUI 綫程中履行 I/O 操作時。
若調用來自的槽有連接到 bytesWritten () 信號, bytesWritten () 不會重新發射。
重實現此函數能為自定義設備提供阻塞 API。默認實現什麼都不做,並返迴
false
.
警告: 從主 GUI 綫程調用此函數可能導緻用戶界麵被凍結。
另請參閱 waitForReadyRead ().
[虛擬]
bool
QIODevice::
waitForReadyRead
(
int
msecs
)
阻塞直到有新的數據可供讀取且 readyRead () 信號已發射,或直到 msecs 毫秒已過去。若 msecs 為 -1,此函數不會超時。
返迴
true
若新數據可用於讀取;否則返迴 false (若操作超時或齣現錯誤)。
可以在沒有事件循環的情況下操作此函數。它很有用,當編寫非 GUI 應用程序和在非 GUI 綫程中履行 I/O 操作時。
若調用來自的槽有連接到 readyRead () 信號, readyRead () 不會重新發射。
重實現此函數能為自定義設備提供阻塞 API。默認實現什麼都不做,並返迴
false
.
警告: 從主 GUI 綫程調用此函數可能導緻用戶界麵被凍結。
另請參閱 waitForBytesWritten ().
寫入最多 maxSize 字符的數據從 data 到設備。返迴實際寫入字節數;或 -1,若發生錯誤。
這是重載函數。
把數據從 8 位字符的零終止字符串寫入設備。返迴實際寫入字節數;或 -1,若發生錯誤。這相當於
... QIODevice::write(data, qstrlen(data)); ...
該函數在 Qt 4.5 引入。
這是重載函數。
寫入內容為 byteArray 到設備。返迴實際寫入字節數;或 -1,若發生錯誤。
返迴可用寫入通道數,若設備是打開的;否則返迴 0。
該函數在 Qt 5.7 引入。
另請參閱 readChannelCount ().
[pure virtual protected]
qint64
QIODevice::
writeData
(const
char
*
data
,
qint64
maxSize
)
寫入直到 maxSize 字節來自 data 到設備。返迴寫入字節數,或 -1 若發生錯誤。
此函數被調用通過 QIODevice 。重實現此函數,當創建子類為 QIODevice .
當重實現此函數時,此函數在返迴前寫入所有可用數據很重要。這是必需的為使 QDataStream 能夠運轉於類。 QDataStream 假定寫入瞭所有信息,因此,不會試著寫入 (若存在問題)。