?? qiodevice.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-win-commercial-3.0.5/src/tools/qiodevice.cpp:40 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Translator" content="Cavendish">
<meta name="Qt zh_CN Documents Website" content="http://www.qiliang.net/qt">
<title>QIODevice類</title>
<style type="text/css"><!--
h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; font-family: "Times New Roman" }
--></style>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#E5E5E5">
<td valign=center>
<a href="index.html">
<font color="#004faf">主頁</font></a>
| <a href="classes.html">
<font color="#004faf">所有的類</font></a>
| <a href="mainclasses.html">
<font color="#004faf">主要的類</font></a>
| <a href="annotated.html">
<font color="#004faf">注釋的類</font></a>
| <a href="groups.html">
<font color="#004faf">分組的類</font></a>
| <a href="functions.html">
<font color="#004faf">函數</font></a>
</td>
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table>
<h1 align=center>QIODevice類參考</h1>
<p>QIODevice類是輸入/輸出設備的基類。
<a href="#details">詳情請見……</a>
<p><tt>#include <<a href="qiodevice-h.html">qiodevice.h</a>></tt>
<p>被<a href="qbuffer.html">QBuffer</a>、<a href="qfile.html">QFile</a>、<a href="qsocket.html">QSocket</a>和<a href="qsocketdevice.html">QSocketDevice</a>繼承。
<p><a href="qiodevice-members.html">所有成員函數的列表。</a>
<h2>公有成員</h2>
<ul>
<li><div class=fn>typedef off_t <a href="#Offset"><b>Offset</b></a></div></li>
<li><div class=fn><a href="#QIODevice"><b>QIODevice</b></a> ()</div></li>
<li><div class=fn>virtual <a href="#~QIODevice"><b>~QIODevice</b></a> ()</div></li>
<li><div class=fn>int <a href="#flags"><b>flags</b></a> () const</div></li>
<li><div class=fn>int <a href="#mode"><b>mode</b></a> () const</div></li>
<li><div class=fn>int <a href="#state"><b>state</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isDirectAccess"><b>isDirectAccess</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isSequentialAccess"><b>isSequentialAccess</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isCombinedAccess"><b>isCombinedAccess</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isBuffered"><b>isBuffered</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isRaw"><b>isRaw</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isSynchronous"><b>isSynchronous</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isAsynchronous"><b>isAsynchronous</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isTranslated"><b>isTranslated</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isReadable"><b>isReadable</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isWritable"><b>isWritable</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isReadWrite"><b>isReadWrite</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isInactive"><b>isInactive</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isOpen"><b>isOpen</b></a> () const</div></li>
<li><div class=fn>int <a href="#status"><b>status</b></a> () const</div></li>
<li><div class=fn>void <a href="#resetStatus"><b>resetStatus</b></a> ()</div></li>
<li><div class=fn>virtual bool <a href="#open"><b>open</b></a> ( int mode ) = 0</div></li>
<li><div class=fn>virtual void <a href="#close"><b>close</b></a> () = 0</div></li>
<li><div class=fn>virtual void <a href="#flush"><b>flush</b></a> () = 0</div></li>
<li><div class=fn>virtual Offset <a href="#size"><b>size</b></a> () const = 0</div></li>
<li><div class=fn>virtual Offset <a href="#at"><b>at</b></a> () const</div></li>
<li><div class=fn>virtual bool <a href="#at-2"><b>at</b></a> ( Offset pos )</div></li>
<li><div class=fn>virtual bool <a href="#atEnd"><b>atEnd</b></a> () const</div></li>
<li><div class=fn>bool <a href="#reset"><b>reset</b></a> ()</div></li>
<li><div class=fn>virtual Q_LONG <a href="#readBlock"><b>readBlock</b></a> ( char * data, Q_ULONG maxlen ) = 0</div></li>
<li><div class=fn>virtual Q_LONG <a href="#writeBlock"><b>writeBlock</b></a> ( const char * data, Q_ULONG len ) = 0</div></li>
<li><div class=fn>virtual Q_LONG <a href="#readLine"><b>readLine</b></a> ( char * data, Q_ULONG maxlen )</div></li>
<li><div class=fn>Q_LONG <a href="#writeBlock-2"><b>writeBlock</b></a> ( const QByteArray & data )</div></li>
<li><div class=fn>virtual QByteArray <a href="#readAll"><b>readAll</b></a> ()</div></li>
<li><div class=fn>virtual int <a href="#getch"><b>getch</b></a> () = 0</div></li>
<li><div class=fn>virtual int <a href="#putch"><b>putch</b></a> ( int ch ) = 0</div></li>
<li><div class=fn>virtual int <a href="#ungetch"><b>ungetch</b></a> ( int ch ) = 0</div></li>
</ul>
<hr><a name="details"></a><h2>詳細描述</h2>
<p> QIODevice類是輸入/輸出設備的基類。
<p>
<p> 一個輸入/輸出設備代表了一個可從中讀取字節和/和向它寫字節的一種媒介。QIODevice類是一個所有這樣的設備的抽象超類,像<a href="qfile.html">QFile</a>、<a href="qbuffer.html">QBuffer</a>和<a href="qsocket.html">QSocket</a>這些類繼承了QIODevice類并且適當地實現了像write()這樣地虛函數。
<p> 盡管應用程序有時直接使用QIODevice,但通常最好是通過提供了對任何一個QIODevice子類的流操作的<a href="qtextstream.html">QTextStream</a>和<a href="qdatastream.html">QDataStream</a>。QTextStream提供了基于文本的流的功能(比如對于人們是可讀的ASCII文件),而QDataStream則可以以完全不依賴平臺的方式處理二進制數據。
<p> QIODevice中的公有成員可以粗略地分為兩類:操作函數和狀態訪問函數。最主要的操作函數有:
<p> <ul>
<p> <li> <a href="#open">open</a>() 打開一個用來讀和/或寫的設備,依賴于open()所使用的參數。
<p> <li> <a href="#close">close</a>() 關閉設備并且整理好。
<p> <li> <a href="#readBlock">readBlock</a>() 從一個設備中讀取一塊數據。
<p> <li> <a href="#writeBlock">writeBlock</a>() 向一個設備中寫入一塊數據。
<p> <li> <a href="#readLine">readLine</a>() reads a line (of text, usually) from the device.
<p> <li> <a href="#flush">flush</a>() 確保所有的緩存數據都已經寫入到真正的設備中。
<p> </ul>
<p> 這里是其它的一些不太常用的操作函數:
<p> <ul>
<p> <li> <a href="#getch">getch</a>() 讀一個單字符。
<p> <li> <a href="#ungetch">ungetch</a>() 如果可能的話,忘記上一次對getch()的調用。
<p> <li> <a href="#putch">putch</a>() 寫一個單字符。
<p> <li> <a href="#size">size</a>() 如果有這個設備的話,返回它的大小。
<p> <li> <a href="#at">at</a>() 如果這個設備存在一個當前讀/寫指針,就返回這個指針的位置,否則就移動這個指針。
<p> <li> <a href="#atEnd">atEnd</a>() 如果對于這個設備是有意義的問題的話,就會表示出是否還可以繼續讀。
<p> <li> <a href="#reset">reset</a>() 如果對于這個設備是可能的話,就移動讀/寫指針到這個設備的開始位置。
<p> </ul>
<p> 狀態訪問就是所有的“讀取”函數。QIODevice子類調用setState()來更新狀態,并且簡單的訪問函數告訴用戶這個設備的狀態。這里就是設置和與它們相配合的訪問函數:
<p> <ul>
<p> <li> 訪問類型。 一些設備是被隨機存取的(它可以在任何地方直接讀/寫),而其它的設備是順序存取的。QIODevice提供了訪問函數(<a href="#isDirectAccess">isDirectAccess</a>()、<a href="#isSequentialAccess">isSequentialAccess</a>()和<a href="#isCombinedAccess">isCombinedAccess</a>())來告訴用戶一個給定的輸入/輸出設備所支持的。
<p> <li> 緩存。 一些設備是以直接的模式被訪問,而其它設備則使用緩存模式。緩存可以提供更高的效率,尤其是一些小的讀/寫操作。<a href="#isBuffered">isBuffered</a>()告訴用戶給定的設備是否被緩存。(這通常可以通過應用程序調用<a href="#open">open</a>()來設置。)
<p> <li> 同步性。 同步設備立即工作(比如文件)。當你從一個文件中讀時,文件立刻傳遞它的數據。其它類型的設備,比如一個連接到HTTP服務器的套接字,也許在你命令它讀取的幾秒后才傳遞數據。<a href="#isSynchronous">isSynchronous</a>()和<a href="#isAsynchronous">isAsynchronous</a>()會告訴用戶如何操作這個設備的。
<p> <li> 回車/換行翻譯。 簡單地說,應用程序通常喜歡看到只有一種單一的回車/換行風格,并且QIODevice子類可以提供這個。如果這個對象把回車/換行翻譯成僅僅是換行,<a href="#isTranslated">isTranslated</a>()返回真。(這通常可以通過應用程序調用<a href="#open">open</a>()來設置。)
<p> <li> 權限。 一些文件不能被寫。比如,<a href="#isReadable">isReadable</a>()、<a href="#isWritable">isWritable</a>()和<a href="#isReadWrite">isReadWrite</a>()告訴應用程序一個給定設備是否可讀和可寫。(這通常可以通過應用程序調用<a href="#open">open</a>()來設置。)
<p> <li> 最后,如果設備是打開的話,比如在調用open()之后,<a href="#isOpen">isOpen</a>()返回真。
<p> </ul>
<p> QIODevice提供了大量的純虛函數,你在繼承它的時候需要實現這些函數。這里是一個子類的框架,其中包含了你所需要的全部成員和一些你也許需要的成員:
<p> <pre>
class MyDevice : public QIODevice
{
public:
MyDevice();
~MyDevice();
bool open( int mode );
void close();
void flush();
uint size() const;
int at() const; // 非純虛
bool at( int ); // 非純虛
bool atEnd() const; // 非純虛
int readBlock( char *data, uint maxlen );
int writeBlock( const char *data, uint len );
int readLine( char *data, uint maxlen );
int getch();
int putch( int );
int ungetch( int );
};
</pre>
<p> 這里有三個非純虛函數,它們對于順序設備是可以不用實現的。
<p> 也可以參考<a href="qdatastream.html">QDataStream</a>、<a href="qtextstream.html">QTextStream</a>和<a href="io.html">輸入/輸出和網絡</a>。
<hr><h2>成員類型文檔</h2>
<h3 class=fn><a name="Offset"></a>QIODevice::Offset</h3>
設備中的位移。
<hr><h2>成員函數文檔</h2>
<h3 class=fn><a name="QIODevice"></a>QIODevice::QIODevice ()
</h3>
構造一個輸入/輸出設備。
<h3 class=fn><a name="~QIODevice"></a>QIODevice::~QIODevice ()<tt> [虛]</tt>
</h3>
析構一個輸入/輸出設備。
<h3 class=fn><a href="qiodevice.html#Offset">Offset</a> <a name="at"></a>QIODevice::at () const<tt> [虛]</tt>
</h3>
虛函數返回當前輸入/輸出設備位置。
<p> 這是輸入/輸出設備讀/寫數據的頭的位置。
<p> <p>也可以參考<a href="#size">size</a>()。
<p>在<a href="qfile.html#at-2">QFile</a>和<a href="qsocket.html#at">QSocket</a>中被重新實現。
<h3 class=fn>bool <a name="at-2"></a>QIODevice::at ( <a href="qiodevice.html#Offset">Offset</a> pos )<tt> [虛]</tt>
</h3>
這是一個重載成員函數,提供了更多方便。它的行為和上面的函數基本一致。
<p> 虛函數設置輸入/輸出位置到<em>pos</em>。如果位置設置成功,返回真,比如<em>pos</em>是在范圍之內,否則返回假。
<p> <p>也可以參考<a href="#size">size</a>()。
<p>在<a href="qfile.html#at">QFile</a>和<a href="qsocket.html#at-2">QSocket</a>中被重新實現。
<h3 class=fn>bool <a name="atEnd"></a>QIODevice::atEnd () const<tt> [虛]</tt>
</h3>
如果輸入/輸出設備位置在輸入的末尾位置時,虛函數返回真,否則返回假。
<p>在<a href="qfile.html#atEnd">QFile</a>和<a href="qsocket.html#atEnd">QSocket</a>中被重新實現。
<h3 class=fn>void <a name="close"></a>QIODevice::close ()<tt> [純虛]</tt>
</h3>
關閉輸入/輸出設備。
<p> 這個虛函數在所有的子類中必須被重新實現。
<p> <p>也可以參考<a href="#open">open</a>()。
<p>實例:<a href="grapher-nsplugin-example.html#x2679">grapher/grapher.cpp</a>。
<p>在<a href="qfile.html#close">QFile</a>和<a href="qsocket.html#close">QSocket</a>中被重新實現。
<h3 class=fn>int <a name="flags"></a>QIODevice::flags () const
</h3>
返回當前輸入/輸出設備標記設置。
<p> 標記由模式標記和狀態標記組成。
<p> <p>也可以參考<a href="#mode">mode</a>()和<a href="#state">state</a>()。
<h3 class=fn>void <a name="flush"></a>QIODevice::flush ()<tt> [純虛]</tt>
</h3>
<p> 刷新一個打開的輸入/輸出設備。
<p> 這個虛函數在所有的子類中必須被重新實現。
<p>在<a href="qfile.html#flush">QFile</a>和<a href="qsocket.html#flush">QSocket</a>中被重新實現。
<h3 class=fn>int <a name="getch"></a>QIODevice::getch ()<tt> [純虛]</tt>
</h3>
<p> 從輸入/輸出設備中讀取一個單一的字節/字符。
<p> 返回所讀取的字節/字符,或者是如果到了輸入/輸出設備的終點,返回-1。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -