QT开发(二十八)——QT常用类(二)

QT开发(二十八)——QT常用类(二)

一、QDir

1、QDir简介

QDir提供对目录结构及其内容的访问。

QDir通过相对或绝对路径指向一个文件。

2、QDir成员函数

QDir主要成员函数如下:

QDir::QDir ( const QDir & dir )

QDir::QDir ( const QString & path = QString() )

Dir::QDir ( const QString & path, const QString & nameFilter, SortFlags sort = SortFlags( Name | IgnoreCase ),Filters filters = AllEntries )

构造函数

QString QDir::absoluteFilePath ( const QString & fileName ) const

返回目录中文件的绝对路径

QString QDir::absolutePath () const

返回绝对路径,不包括.和..

bool QDir::cd ( const QString & dirName )

切换到目录

uint QDir::count () const

返回目录中文件和目录的数量

QDir QDir::current () [static]

返回应用程序的当前目录

QString QDir::currentPath () [static]

返回应用程序当前目录的绝对路径

QFileInfoList QDir::entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const

QFileInfoList QDir::entryInfoList(Filters filters = NoFilter, SortFlags sort = NoSort) const

返回目录中所有文件与目录的QFileInfo对象链表

QStringList QDir::entryList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const

QStringList QDir::entryList(Filters filters = NoFilter,

SortFlags sort = NoSort) const

返回目录中所有文件与目录的名字的链表

bool QDir::exists(const QString & name) const

如果name文件存在返回true

bool QDir::exists() const

如果目录存在,返回true

bool QDir::isAbsolute() const

如果目录路径是绝对路径,返回true

bool QDir::isAbsolutePath(const QString & path) [static]

如果路径path是绝对路径,返回true

bool QDir::makeAbsolute()

将目录路径转化为绝对路径

bool QDir::mkdir(const QString & dirName) const

创建一个dirNanme的子目录

bool QDir::mkpath(const QString & dirPath) const

创建dirPath目录路径

void QDir::setSorting(SortFlags sort)

设置排序方式

void QDir::setFilter(Filters filters)

设置过滤器

bool QDir::setCurrent(const QString & path) [static]

将path设置为应用程序的当前工作目录

bool QDir::remove(const QString & fileName)

删除文件fileName

bool QDir::rename(const QString & oldName, const QString & newName)

将文件或目录oldName重命名为newName

bool QDir::rmdir(const QString & dirName) const

删除指定目录dirName

bool QDir::rmpath(const QString & dirPath) const

删除指定目录路径dirPath

二、QFile

1、QFile简介

QFile提供了读写文件的接口,是读写文本文件、二进制文件、资源文件的I/O设备。

QT4版本的QIODevice类图如下:

QT5版本的QIODevice类图如下:

各个类的用途如下:

QIODevice:所有 I/O 设备类的基类,提供了字节块读写的通用操作以及基本接口;

QFlie:访问本地文件或者嵌入资源;

QTemporaryFile:创建和访问本地文件系统的临时文件;

QBuffer:读写 QByteArray;

QProcess:运行外部程序,处理进程间通讯;

QAbstractSocket:所有套接字类的父类;

QTcpSocket:TCP 协议网络数据传输;

QUdpSocket:传输 UDP 报文;

QSslSocket:使用 SSL/TLS 传输数据;

QFileDevice:Qt5 新增加的类,提供了有关文件操作的通用实现。

QProcess、QTcpSocket、QUdpSoctet和QSslSocket是顺序访问设备,QFile、QTemporaryFile和QBuffer是随机访问设备。QFile提供了从文件中读取和写入数据的能力,QFile主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过 QFileInfo 获取。

2、QFile成员函数

QFile主要成员函数如下:

QFile::QFile ( const QString & name )

QFile::QFile ( QObject * parent )

QFile::QFile ( const QString & name, QObject * parent )

构造函数

bool QFile::open ( OpenMode mode ) [virtual]

bool QFile::open ( FILE * fh, OpenMode mode )

bool QFile::open ( int fd, OpenMode mode )

打开文件

qint64 QFile::readData(char * data, qint64 len)[virtual protected]

qint64 QFile::readLineData(char * data, qint64 maxlen)[virtual protected]

读取数据

qint64 QFile::writeData(const char * data, qint64 len)[virtual protected]

写入数据

void QFile::close () [virtual]

关闭文件

bool QFile::copy(const QString & newName)

拷贝当前文件到newName文件

bool QFile::copy(const QString & fileName,const QString & newName)[static]

拷贝fileName文件到newName文件

bool QFile::exists ( const QString & fileName ) [static]

bool QFile::exists () const

文件是否存在

bool QFile::atEnd () const [virtual]

如果到达文件结束,返回true

QString QFile::fileName () const

返回文件名

bool QFile::remove ()

bool QFile::remove ( const QString & fileName ) [static]

删除文件

bool QFile::rename ( const QString & newName )

bool QFile::rename(const QString & oldName, const QString & newName)[static]

重命名文件

void QFile::setFileName ( const QString & name )

设置文件名

void QFile::setDecodingFunction ( DecoderFn function ) [static]

设置解码函数

void QFile::setEncodingFunction ( EncoderFn function ) [static]

设置编码函数

一、QFileInfo

1、QFileInfo简介

QFileInfo提供了独立与系统的文件信息。

QFileInfo提供了文件系统中文件的名字与路径、访问权限和是否是目录或符号链接的信息。

2、QFileInfo成员函数

QDir QFileInfo::absoluteDir() const

返回文件的绝对路径

QString QFileInfo::absoluteFilePath() const

返回包含文件名的文件的绝对路径

QString QFileInfo::absolutePath() const

返回不包含文件名的文件的绝对路径

QString QFileInfo::baseName() const

返回不带路径的文件的基本名字,不带任何文件后缀

QString QFileInfo::completeBaseName() const

返回不带路径的文件的完整基本名字,不带最后一个后缀

QString QFileInfo::completeSuffix() const

返回文件的完整后缀

QDateTime QFileInfo::created() const

返回创建文件的日期和时间

QDir QFileInfo::dir() const

返回对象的父目录的路径

QString QFileInfo::fileName() const

返回文件名,不包含路径

QString QFileInfo::filePath() const

返回包含路径的文件名

QString QFileInfo::path() const

返回不包括文件名的文件路径

qint64 QFileInfo::size() const

返回文件的大小

QString QFileInfo::suffix() const

返回文件的后缀

QString QFileInfo::symLinkTarget() const

返回符号链接指向的文件或目录的绝对路径

二、QDataStream

1、QDataStream简介

QDataStream 提供了基于 QIODevice 的二进制数据的序列化。数据流是一种二进制流,完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了Windows平台的 PC 上面写入的一个数据流,可以不经过任何处理,直接拿到运行了Solaris的SPARC机器上读取。由于数据流就是二进制流,因此我们也可以直接读写没有编码的二进制数据,例如图像、视频、音频等。

QDataStream既能够存取C++基本类型,如int、char、short等,也可以存取复杂的数据类型,例如自定义的类。实际上,QDataStream 对于类的存储,是将复杂的类分割为很多基本单元实现的。

数据流和QIODevice紧密配合使用。QIODevice是读取数据和写入数据的输入输出中介。

写入二进制数据到流代码如下:

QFile file("file.dat");

file.open(QIODevice::WriteOnly);

//串行化数据到到文件

QDataStream out(&file);

//串行输出一个字符串

out << QString("the answer is");

//串行输出一个整型

out << (qint32)42;

从流中读取二进制数据:

QFile file("file.dat");

file.open(QIODevice::ReadOnly);

//从文件中串行化读取数据

QDataStream in(&file);

QString str;

qint32 a;

//从文件中读物字符串和整型

in >> str >> a;

当输入输出复杂类型时,确保读出流和写入流的版本相同是非常重要的。如果需要流操作的前后兼容,需要在应用程序在硬编码版本号。

stream.setVersion(QDataStream::Qt_4_0);

如果要生成新的二进制数据格式,如由应用程序创建的文档文件格式,可以使用QDataStream以兼容格式写入数据。通常,为了给程序未来扩展留有余地,可以写入包含魔术字符串和版本号的简要头信息。

QFile file("file.xxx");

file.open(QIODevice::WriteOnly);

QDataStream out(&file);

// Write a header with a "magic number" and a version

out << (quint32)0xA0B0C0D0;

out << (qint32)123;

out.setVersion(QDataStream::Qt_4_0);

// Write the data

out << lots_of_interesting_data;

读取数据的代码如下:

QFile file("file.xxx");

file.open(QIODevice::ReadOnly);

QDataStream in(&file);

// Read and check the header

quint32 magic;

in >> magic;

if (magic != 0xA0B0C0D0)

return XXX_BAD_FILE_FORMAT;

// Read the version

qint32 version;

in >> version;

if (version < 100)

return XXX_BAD_FILE_TOO_OLD;

if (version > 123)

return XXX_BAD_FILE_TOO_NEW;

if (version <= 110)

in.setVersion(QDataStream::Qt_3_2);

else

in.setVersion(QDataStream::Qt_4_0);

// Read the data

in >> lots_of_interesting_data;

if (version >= 120)

in >> data_new_in_XXX_version_1_2;

in >> other_interesting_data;

当串行化数据时,可以选择要使用的字节序。默认设置的字节序是大端。字节序设置为小端将会破坏兼容性,除非读取的时候也使用小端。除非有特殊需求,一般使用默认设置的字节序。

直接从流中读取原生二进制数据使用readRawData()函数,写入原生二进制数据到流使用writeRawData()函数,但数据的编解码必须自己完成。

与readRawData()函数不同,readBytes()函数读取一个quint32长度的数据到预分配的内存空间;writeBytes()写入quint32长度的数据。任何不同于quint32长度的数据的编解码必须自己完成。

QT容器类可以串行化到QDataStream,包括QList、QLinkedList、QVector、QSet、QHash和QMap。

当在异步设备上使用数据流时,数据中的大部分都能在任意时间点到达。QDataStream实现了使用一系列流操作符自动读取数据的事务机制。

2、QDataStream成员函数

QDataStream::QDataStream(QIODevice *d)

QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode mode)

QDataStream::QDataStream(const QByteArray &a)

构造函数

void QDataStream::abortTransaction()

中止一个读取事务

bool QDataStream::atEnd() const

如果IO设备到达文件或流的结束位置,返回true

ByteOrder QDataStream::byteOrder() const

返回当前字节序设置

bool QDataStream::commitTransaction()

返回一个读取事务,如果事务中没有发生读错误,返回true

QIODevice *QDataStream::device() const

返回当前设置的IO设备,如果没有设置,返回0

FloatingPointPrecision QDataStream::floatingPointPrecision() const

返回数据流的浮点精度

QDataStream &QDataStream::readBytes(char *&s, uint &l)

从流中读取缓冲区s,返回流的引用

int QDataStream::readRawData(char *s, int len)

从流中读取至多len字节到缓冲区s,返回读取的字节数,发生错误,返回-1

void QDataStream::resetStatus()

重置数据流的状态

void QDataStream::rollbackTransaction()

恢复一个读事务

void QDataStream::setByteOrder(ByteOrder bo)

设置串行化字节序到bo

void QDataStream::setDevice(QIODevice *d)

设置IO设备到d

void QDataStream::setFloatingPointPrecision(FloatingPointPrecision precision)

设置数据流的浮点精度到precision

void QDataStream::setStatus(Status status)

设置数据流的状态为给定状态status

void QDataStream::setVersion(int v)

设置数据串行化的版本到v

为了适应新的功能,在某些QT版本中,一些QT类数据流串行化格式已经做出了改变。如果想读取在早期QT版本创建的数据,或是写只有在早期QT版本编译的程序中才能读取的数据,需要修改数据流串行化格式。

int QDataStream::skipRawData(int len)

跳过设备中的len个字节,返回实际跳过的字节数

void QDataStream::startTransaction()

在流中启动一个新的读事务

Status QDataStream::status() const

返回数据流的状态

int QDataStream::version() const

返回数据串行化格式的版本号

QDataStream &QDataStream::writeBytes(const char *s, uint len)

写长度为len的缓冲区s到流,返回流的引用

int QDataStream::writeRawData(const char *s, int len)

从s中写len字节到流

五、QTextStream

1、QTextStream简介

QTextStream为读写文本提供了实用接口。QTextStream可以操作QIODevice、QByteArray 、QString数据。使用QTextStream的流操作符,可以方便读写字、行、数字。QTextStream支持字段填充、对齐的格式化选项和数字格式化。

QFile data("output.txt");

if (data.open(QFile::WriteOnly | QFile::Truncate))

{

QTextStream out(&data);

out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;

// writes "Result: 3.14      2.7       "

}

通常使用QTextStream读取控制台输入和写入控制台输出。QTextStream支持本地化,会使用正确codec编解码器自动解码标准输入。

QTextStream stream(stdin);

QString line;

while (stream.readLineInto(&line))

{

...

}

除了使用QTextStream构造函数,可以使用setDevice()或setString()设置流的设备或字符串。使用seek()函数定位位置,如果没有数据可读,atEnd()函数会返回true。

QTextStream在内使用基于Unicode编码的缓冲区,使用QTextCodec编译码器自动支持不同的字符集。默认,QTextCodec::codecForLocale()用于读写,但也能调用setCodec()设置编译码器。自动支持Unicode编码检测是默认行为,当读取的时候,QTextStream会检测UTF-16或是UTF-32 BOM并且自动选择合适的编解码器。QTextStream默认不会以BOM方式写,但是可以调用setGenerateByteOrderMark(true)设置。QTextStream直接操作QString时,编译码器codec是失效的。

默认,从文本流中读取数字时,QTextStream会自动检测数字的进制。如果数字以0x开头会被假设为16进制;数字以1--9开头,会被假设为10进制。

2、QTextStream成员函数

QTextStream::QTextStream(QIODevice *device)

QTextStream::QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

QTextStream::QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

QTextStream::QTextStream(QByteArray *array, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

QTextStream::QTextStream(const QByteArray &array, QIODevice::OpenMode openMode = QIODevice::ReadOnly)

构造函数

bool QTextStream::atEnd() const

流中不再有数据可读,返回true

bool QTextStream::autoDetectUnicode() const

如果自动Unicode检测打开,返回true

QTextCodec *QTextStream::codec() const

返回流的当前的编解码器

QIODevice *QTextStream::device() const

返回流关联的当前设备

FieldAlignment QTextStream::fieldAlignment() const

返回当前的字段对齐方式

int QTextStream::fieldWidth() const

返回当前字段宽度

void QTextStream::flush()

刷新任何在等待的缓冲区数据,写入到设备

bool QTextStream::generateByteOrderMark() const

当使用UTF编解码器时,如果流设置为UTF BOM,返回true

int QTextStream::integerBase() const

返回整数的进制

QLocale QTextStream::locale() const

返回命令设置语言环境,默认为C

QChar QTextStream::padChar() const

返回当前的填充字符

QString QTextStream::read(qint64 maxlen)

从流中读取至多len字节,返回读取的数据QString

QString QTextStream::readAll()

读取流中的所有内容

QString QTextStream::readLine(qint64 maxlen = 0)

从流中读取一行文本,返回的字符串不包含行结束符

允许行的最大长度为maxlen,如果maxlen为0,则为允许任何长度

void QTextStream::setCodec(QTextCodec *codec)

设置流的编解码器为codec

void QTextStream::setCodec(const char *codecName)

设置流的编解码器codec为指定名字codecName的编码,通常为ISO 8859-1、UTF-8、UTF-16

void QTextStream::setDevice(QIODevice *device)

设置当前设备到device,如果已经有设备,取代旧的设备

void QTextStream::setFieldAlignment(FieldAlignment mode)

设置字段对齐方式

void QTextStream::setFieldWidth(int width)

设置字段宽度

void QTextStream::setIntegerBase(int base)

设置整数进制

void QTextStream::setLocale(const QLocale &locale)

设置流的本地环境为locale

void QTextStream::setPadChar(QChar ch)

设置填充字符为ch

void QTextStream::setString(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

设置当前的字符串到string,打开方式为openMode

QString *QTextStream::string() const

返回流所赋值的字符串,如果没有字符串,返回0

时间: 2024-10-25 22:07:10

QT开发(二十八)——QT常用类(二)的相关文章

Android项目实战(二十八):Zxing二维码实现及优化

原文:Android项目实战(二十八):Zxing二维码实现及优化 前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中我们也许只会用到二维码的扫描和生成两个功能,所以不必下载完整的jar包,使用简化版的即可,下文可见. 这篇文章讲述:1.如果快速在项目中集成zxing,实现扫描和生成二维码功能 2.根据项目需求去修改源码实现我们的要求并进行优化 一.快速集成zxing二维码 1.下载库文件 : http://do

QT开发(二十)——QT对话框

QT开发(二十)--QT对话框 一.对话框简介 对话框是与用户进行简短交互的顶层窗口 QDialog是QT中所有对话框窗口的基类,QDialog继承于QWidget,是一种容器型的组件,是定制了窗口样式的特殊QWidget. QDialog作为一种专用的交互窗口,不能作为子部件嵌入其他容器中. 二.对话框类型 对话框类型分为模态对话框和非模态对话框. 1.模态对话框 模态对话框显示后无法与父窗口进行交互,是一种阻塞式的对话框,使用QDialog::exec()函数调用. 模态对话框一般在栈上创建

QT开发(十二)——QT事件处理机制

QT开发(十二)--QT事件处理机制 一.QT事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下和松开 鼠标事件: 鼠标移动,鼠标按键的按下和松开 拖放事件: 用鼠标进行拖放 滚轮事件: 鼠标滚轮滚动 绘屏事件: 重绘屏幕的某些部分 定时事件: 定时器到时 焦点事件: 键盘焦点移动 进入和离开事件: 鼠标移入widget之内,或是移出 移动事件: widget的

QT开发(十九)——QT内存泄漏问题

QT开发(十九)--QT内存泄漏问题 一.QT对象间的父子关系 QT最基础和核心的类是:QObject,QObject内部有一个list,会保存children,还有一个指针保存parent,当自己析构时,会自己从parent列表中删除并且析构所有的children. QT对象之间可以存在父子关系,每一个对象都可以保存它所有子对象的指针,每一个对象都有一个指向其父对象的指针. 当指定QT对象的父对象时,父对象会在子对象链表中加入该对象的指针,该对象会保存指向其父对象的指针. 当QT对象被销毁时,

QT开发(十四)——QT绘图系统

QT开发(十四)--QT绘图系统 一.QT绘图原理 Qt4中的2D绘图系统称为Arthur绘图系统,可以使用相同的API在屏幕上和绘图设备上进行绘制,主要基于QPainter.QPainterDevice和 QPainterEngine.QPainter执行绘图操作,QPainterDevice提供绘图设备,是一个二维空间的抽象,QPainterEngine提供一些接口.QPainter用来执行具体的绘图相关操作,如画点,画线,填充,变换,alpha通道等.QPaintDevice类是能够进行绘

QT开发(十五)——QT坐标系统

QT开发(十五)--QT坐标系统 一.QT坐标系简介 Qt中每一个窗口都有一个坐标系,默认窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小.原点即为(0,0)点,以像素为单位增减. 二.坐标系变换 坐标系变换是利用变换矩阵来进行的, 通常利用QTransform类来设置变换矩阵.QPainter类提供了对坐标系的平移,缩放,旋转,扭曲等变换函数. void translate(const QPointF & offset) void transla

QT开发(十六)——QT绘图实例-钟表

QT开发(十六)--QT绘图实例-钟表 一.钟表实现原理 钟表的实现需要设置定时器,定时器每隔一秒发送timeout()信号到QWidget::update()槽函数,update()槽函数将会重绘一次窗口,重写重绘事件函数paintEvent(QPaintEvent *event),根据获取的当前系统时间的时钟.分钟.秒钟重绘钟表的时针.分针.秒针. QTimer *timer = new QTimer(this); timer->start(1000);//一秒钟 connect(timer

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

企业搜索引擎开发之连接器connector(二十八)

通常一个SnapshotRepository仓库对象对应一个DocumentSnapshotRepositoryMonitor监视器对象,同时也对应一个快照存储器对象,它们的关联是通过监视器管理对象DocumentSnapshotRepositoryMonitorManagerImpl实现的 DocumentSnapshotRepositoryMonitorManagerImpl类要实现那些行为,先查看其实现接口DocumentSnapshotRepositoryMonitorManager定义