QT学习之路56:
QIODevice:查看Qt Assistant,它是QT中所有IO设备的基类接口类,它提供一般实现和支持读写数据块设备的抽象接口,如QFile,QBuffer,QTcpSocket。它是抽象的,不能被实例化,但使用它定义的接口来提供独立设备的IO特征。在访问设备之前,open()必须设置正确的OpenMode,如ReadOnly,ReadWrite,也能通过write(),putChar()来写。read(),readLine(),readAll()类读。
QIODevice区别2种类型的设备:随机访问设备和顺序访问设备。随机访问设备支持从任意位置访问,也可以通过seek()重新定位文件指针,pos()获得当前文件指针。QFile,QBuffer是这种类型的设备。顺序访问设备不支持从任意位置访问设备,数据只能访问一遍。即从第一个字节开始到最后一个字节。顺序访问设备不能使用pos()函数和size()函数。QTcpSocket和QProcess是这种类型的器件。。。。。。。。。。。。后面的内容没有翻译。
文件的访问方式:QDataStream进行二进制方式访问和QTextStream进行文本方式访问。另外QT还提供了QDir和QFileInfo两个类来处理文件夹事务和查看文件信息。
自己写的打开一个text file ,然后显示在textEdit中:
源代码:
ex::ex(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
m_pLabel = new QLabel("Directory:");
m_pLine = new QLineEdit;
m_pPushBtn = new QPushButton("Open");
connect(m_pPushBtn,SIGNAL(clicked()),this,SLOT(open()));
m_pText = new QTextEdit(this);
QHBoxLayout *pHLayout = new QHBoxLayout;
pHLayout->addWidget(m_pLabel);
pHLayout->addWidget(m_pLine);
pHLayout->addWidget(m_pPushBtn);
QVBoxLayout *pVLayout = new QVBoxLayout;
pVLayout->addLayout(pHLayout);
pVLayout->addWidget(m_pText);
this->setLayout(pVLayout);
}
void ex::open()
{
QString fileName = QFileDialog::getOpenFileName(this,tr("Open a File"),".",tr("Text File(*.txt);;pdf file(*.pdf)"));
if(fileName.length() == 0)
QMessageBox::information(this,tr("Text Files"),tr("You have not open any file"));
else
{
QDir *pDir = new QDir(".");
QString fileDir = pDir->filePath(fileName);
m_pLine->setText(fileDir);
QFile file(fileName);
if (!file.open(QIODevice::ReadWrite))
return;
QTextStream out(&file);
while(!file.atEnd())
{
m_pText->setText(out.readAll());
}
}
}