当前位置: 首页 > news >正文

本地拖拽网站建设WordPress主题分页代码

本地拖拽网站建设,WordPress主题分页代码,网站建设中有关层的使用的步骤,湖北最专业的公司网站建设平台在Qt中#xff0c;QFile、QByteArray、QDataStream和QTextStream是常用的文件和数据处理类。 主要功能和区别 QFile#xff1a; QFile是用于读写文本和二进制文件以及资源的I/O设备。可以单独使用QFile#xff0c;或者更方便地与QTextStream或QDataStream一起使用。 通常在…在Qt中QFile、QByteArray、QDataStream和QTextStream是常用的文件和数据处理类。 主要功能和区别 QFile QFile是用于读写文本和二进制文件以及资源的I/O设备。可以单独使用QFile或者更方便地与QTextStream或QDataStream一起使用。 通常在构造函数中传入文件名但也可以随时使用setFileName()进行设置。QFile期望文件分隔符为’/‘不论操作系统为何。不支持使用分隔符例如’。 可以使用exists()检查文件是否存在并使用remove()删除文件。更高级的文件系统相关操作由QFileInfo和QDir提供。 文件使用open()打开使用close()关闭并使用flush()刷新。通常使用QDataStream或QTextStream进行数据的读取和写入但也可以使用QIODevice继承的函数read()、readLine()、readAll()、write()进行操作。QFile还继承了getChar()、putChar()和ungetChar()可以逐个字符地进行操作。 使用size()可以获取文件的大小。可以使用pos()获取当前文件位置或者使用seek()移动到新的文件位置。如果已经到达文件末尾atEnd()返回true。 QByteArray QByteArray类提供了一个字节数组。 QByteArray可用于存储原始字节包括’\0’和传统的8位’\0’终止的字符串。使用QByteArray比使用const char *更方便。在幕后它始终确保数据后跟’\0’终止符并使用隐式共享写时复制来减少内存使用和避免无谓的数据复制。 除了QByteArrayQt还提供了QString类用于存储字符串数据。对于大多数情况应使用QString类。它存储16位Unicode字符使得在应用程序中存储非ASCII/非Latin-1字符变得容易。此外在Qt API中广泛使用QString。QByteArray适用的两种主要情况是当需要存储原始二进制数据时以及内存保护至关重要的情况例如在Qt for Embedded Linux中。 初始化QByteArray的一种方法是将const char *传递给其构造函数。例如以下代码创建一个包含数据Hello的大小为5的字节数组 QByteArray ba(Hello);尽管size()为5字节数组还在末尾保留了一个额外的’\0’字符以便在使用需要指向底层数据的指针的函数例如调用data()时所指向的数据保证是以’\0’结尾的。 QByteArray会对const char *数据进行深拷贝因此您可以稍后进行修改而不会出现副作用。如果出于性能原因您不想对字符数据进行深拷贝请改用QByteArray::fromRawData()。 另一种方法是使用resize()设置数组的大小并逐个字节初始化数据。QByteArray使用基于0的索引就像C数组一样。要访问特定索引位置的字节可以使用operator。对于非const字节数组operator返回一个字节的引用可以在赋值的左侧使用。例如 QByteArray ba;ba.resize(5);ba[0] 0x3c;ba[1] 0xb8;ba[2] 0x64;ba[3] 0x18;ba[4] 0xca;对于只读访问使用at()的替代语法 for (int i 0; i ba.size(); i) {if (ba.at(i) a ba.at(i) f)cout Found character in range [a-f] endl;}at()可能比operator更快因为它永远不会导致深拷贝发生。 要一次提取多个字节请使用left()、right()或mid()。 QByteArray可以嵌入’\0’字节。size()函数始终返回整个数组的大小包括嵌入的’\0’字节但不包括QByteArray添加的终止’\0’。例如 QByteArray ba1(ca\0r\0t);ba1.size(); // 返回2。ba1.constData(); // 返回带有终止\0的ca。QByteArray ba2(ca\0r\0t, 3);ba2.size(); // 返回3。ba2.constData(); // 返回带有终止\0的ca\0。QByteArray ba3(ca\0r\0t, 4);ba3.size(); // 返回4。ba3.constData(); // 返回带有终止\0的ca\0r。const char cart[] {c, a, \0, r, \0, t};QByteArray ba4(QByteArray::fromRawData(cart, 6));ba4.size(); // 返回6。ba4.constData(); // 返回不带终止\0的ca\0r\0t。如果要获取数据长度直到但不包括第一个’\0’字符可以在字节数组上调用qstrlen()。 在调用resize()后新分配的字节的值是未定义的。要将所有字节设置为特定值请调用fill()。 要获取指向实际字符数据的指针请调用data()或constData()。这些函数返回指向数据开头的指针。该指针保证在QByteArray上调用非const函数之前保持有效。还保证除非QByteArray是从原始数据创建的否则数据以’\0’字节结尾。QByteArray自动提供此’\0’字节并且不计入size()中。 QByteArray提供了以下基本函数来修改字节数据append()、prepend()、insert()、replace()和remove()。例如 QByteArray x(and);x.prepend(rock ); // x rock andx.append( roll); // x rock and rollx.replace(5, 3, ); // x rock rollreplace()和remove()函数的前两个参数是要开始擦除的位置和应该擦除的字节数。 当将数据追加到非空数组时数组将被重新分配并将新数据复制到其中。您可以通过调用reserve()来避免此行为它预分配一定数量的内存。您还可以调用capacity()来了解QByteArray实际分配了多少内存。追加到空数组中的数据不会被制。 经常要求从字节数组中删除空白字符‘\n’、‘\t’、等。如果要从QByteArray两端删除空白字符请使用trimmed()。如果要从QByteArray两端删除空白字符并且在字节数组中多个连续的空白字符替换为单个空格字符请使用simplified()。 如果要在QByteArray中查找特定字符或子字符串的所有出现可以使用indexOf()或lastIndexOf()。前者从给定的索引位置向前搜索后者向后搜索。如果找到了字符或子字符串两者都返回其索引位置否则它们返回-1。例如以下是查找特定子字符串的典型循环 QByteArray ba(We must be bbold/b, very bbold/b);int j 0;while ((j ba.indexOf(b, j)) ! -1) {cout Found b tag at index position j endl;j;}如果只是想检查一个QByteArray是否包含特定字符或子字符串请使用contains()。如果想要找出特定字符或子字符串在字节数组中出现的次数请使用count()。如果想要用另一个值替换所有出现的特定值请使用带有两个参数的replace()重载之一。 可以使用诸如operator(), operator(), operator(), operator()等重载运算符来比较QByteArray。比较仅基于字符的数值值非常快速但不符合人的预期。对于排序用户界面字符串QString::localeAwareCompare()是更好的选择。 由于历史原因QByteArray区分空字节数组和空字节数组。空字节数组是通过使用QByteArray的默认构造函数或通过将(const char *)0传递给构造函数进行初始化的字节数组。大小为0的任何字节数组都是空字节数组。空字节数组不一定是null字节数组 QByteArray().isNull(); // 返回trueQByteArray().isEmpty(); // 返回trueQByteArray().isNull(); // 返回falseQByteArray().isEmpty(); // 返回trueQByteArray(abc).isNull(); // 返回falseQByteArray(abc).isEmpty(); // 返回false除了isNull()函数外所有其他函数都将null字节数组视为与空字节数组相同。例如对于null字节数组data()返回指向 ‘\0’ 字符的指针非空指针并且QByteArray()与QByteArray(“”)相等。我们建议始终使用isEmpty()避免使用isNull()。 QDataStream QDataStream类提供了将二进制数据序列化到QIODevice的功能。 数据流是一个二进制编码信息流完全独立于主机计算机的操作系统、CPU或字节顺序。例如由Windows PC编写的数据流可以被运行Solaris系统的Sun SPARC读取。 您还可以使用数据流来读写原始的未编码的二进制数据。如果您需要一个解析输入流请参见QTextStream。 QDataStream类实现了C基本数据类型如char、short、int、char *等的序列化。更杂数据的序列化是通过将数据分解为基本单元来完成的。 数据流与QIODevice紧密配合。QIODevice代表可以从中读取数据或向其写入数据的输入/输出介质。QFile类是一个I/O设备的示例。 示例将二进制数据写入数据流 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; // 提取the answer is和42每个写入流中的项目都以预定义的二进制格式写入该格式取决于项目的类型。支持的Qt类型包括QBrush、QColor、QDateTime、QFont、QPixmap、QString、QVariant等。有关支持数据流的所有Qt类型的完整列表请参见序列化Qt数据类型。 对于整数最好始终将其强制转换为Qt整数类型进行写入并读取回到相同的Qt整数类型中。这样可以确保您获得所需的整数大小并将您与编译器和平台的差异隔离开来。 举个例子一个char *字符串被写为一个32位整数该整数等于字符串长度包括’\0’字节后跟字符串的所有字符包括’\0’字节。当读取一个char *字符串时首先读取4个字节以创建32位长度值然后读取相同数量的字符来创建包含’\0’终止符的char *字符串。 初始的I/O设备通常在构造函数中设置但可以使用setDevice()进行更改。如果已到达数据的末尾或者没有设置I/O设备atEnd()将返回true。 版本控制 自Qt 1.0以来QDataStream的二进制格式已发生了演变并且可能会继续着Qt的变化而发展。在输入或输出复杂类型非常重要的一点是确保在读取和写入时使用相同版本的version()。如果您需要前向和后向兼容性您可以在应用程序中硬编码版本号 stream.setVersion(QDataStream::Qt_4_0);如果您正在生成一种新的二进制数据格式例如您的应用程序创建的文档文件格式您可以使用QDataStream以便于移植的格式写入数据。通常您会写一个简短的头部包含一个标识字符串和一个版本号以便为将来的扩展留出空间。例如 QFile file(file.xxx);file.open(QIODevice::WriteOnly);QDataStream out(file);// 写入包含魔术数字和版本号的头部out (quint32)0xA0B0C0D0;out (qint32)123;out.setVersion(QDataStream::Qt_4_0);//入数据out lots_of_interest_data;然后使用以下代码进行读取 QFile file(file.xxx);file.open(QIODevice::ReadOnly);QDataStream (infile);// 读取并检查头部quint32 magic;in magic;if (magic ! 0xA0B0C0D0)return XXX_BAD_FILE_FORMAT;// 读取版本号qint32 version;in version;if (version 100)return XXX_FILE_TOO_OLD;if (version 123)return XXX_BAD_FILE_TOO_NEW;if (version 110)in.setVersion(QDataStream::Qt_3_2);elsein.setVersion(QDataStream::Qt_4_0);// 取数据in lots_of_interesting_data;if (version 120)in data_new_in_XXX_version_1_2;in other_interesting_data;在序列化数据时您可以选择使用哪种字节顺序。默认设置为big endian最高位在前。将其更改为little endian会破坏可移植性除非读取方也更改为little endian。我们建议保持此设置除非有特殊需求。 读取和写入原始二进制数据 您可能希望直接从数据流中读取/写入自己的原始二进制数据。可以使用readRawData()将数据从流中读取到预先分配的char *中。类似地可以使用writeRawData()将数据写入到流中。注意数据的任何编码/解码都必须由您自己完成。 另一对类似的函数是readBytes()和writeBytes()。与原始函数的不同之处在于readBytes()读取一个quint32将其视为要读取的长度然后将该数量的字节读入预先分配的char *中writeBytes()写入包含数据长度的quint32然后是数据本身。请注意数据的任何编码/解码除了长度quint32之外都必须由您自己完成。 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;// 输出 Result: 3.14 2.7 }通常还会使用QTextStream来读取控制台输入和写入控制台输出。QTextStream具有区域设置意识并将自动使用正确的编解码器对标准输入进行解码。示例 QTextStream stream(stdin);QString line;while (stream.readLineInto(line)) {...}除了使用QTextStream的构造函数外还可以通过调用setDevice()或setString()设置QTextStream操作的设备或字符串。可以通过调用seek()来定位到某个位置当没有数据可以读取时调用atEnd()将返回true。如果调用flush()QTextStream将会将其写缓冲区中的所有数据清空到设备并调用设备上的flush()。 在内部QTextStream使用基于Unicode的缓冲区QTextCodec用于自动支持不同的字符集。默认情况下读取和写入使用QTextCodec::codecForLocale()但也可以通过调用setCodec()来设置编解码器。还支持自动Unicode检测。当启用此功能时默认行为QTextStream将检测UTF-16或UTF-32的BOM字节顺序标记并在读取时切换到适当的UTF编解码器。QTextStream默认不会写入BOM但可以通过调用setGenerateByteOrderMark(true)启用。当QTextStream直接操作QString时编解码器被禁用。 使用QTextStream读取文本文件有三种常见方式 按块读取通过调用readLine()或readAll()。逐个单词读取。QTextStream支持流式读取到QString、QByteArray和char*缓冲区中。单词由空格分隔并自动跳过前导空格。逐个字符读取通过流式读取到QChar或char类型中。这种方法通常用于方便地处理输入无论字符编码和行尾的语义如何。要跳过空格调用skipWhiteSpace()。\ 由于文本流使用缓冲区您不应该使用超类的实现从流中读取。例如如果您有一个QFile并直接使用QFile::readLine()从中读取而不使用流文本流的内部位置将与文件的位置不同步。 默认情况下当从文本流中读取数字时QTextStream会自动检测数字的进制表示。例如如果数字以0x开头它被认为是十六进制形式。如果以1-9的数字开头它被认为是十进制形式依此类推。您可以通过调用setIntegerBase()设置整数的进制从而禁用自动检测。示例 QTextStream in(0x50 0x20);int firstNumber, secondNumber;in firstNumber; // firstNumber 80in dec secondNumber; // secondNumber 0char ch;in ch; // ch xQTextStream支持许多用于生成文本的格式选项。您可以通过调用setFieldWidth()和setPadChar()设置字段宽度和填充字符。使用setFieldAlignment()设置每个字段内的对齐方式。对于实数可以调用setRealNumberNotation()和setRealNumberPrecision()设置所生成数字的表示智能表示、科学表示、定点表示和精度数字位数。还可以通过setNumberFlags()设置其他一些数字格式选项。 与标准C库中的一样QTextStream还定义了几个全局操纵函数 操纵函数描述bin与setIntegerBase(2)相同。oct与setIntegerBase(8)相同。dec与setIntegerBase(10)相同。hex与setIntegerBase(16)相同。showbase与setNumberFlags(numberFlags()forcesign与setNumberFlags(numberFlags()forcepoint与setNumberFlags(numberFlags()noshowbase与setNumberFlags(numberFlags() ~ShowBase)相同。noforcesign与setNumberFlags(numberFlags() ~ForceSign)相同。noforcepoint与setNumberFlags(numberFlags() ~ForcePoint)相同。uppercasebase与setNumberFlags(numberFlags()uppercasedigits与setNumberFlags(numberFlags()lowercasebase与setNumberFlags(numberFlags() ~UppercaseBase)相同。lowercasedigits与setNumberFlags(numberFlags() ~UppercaseDigits)相同。fixed与setRealNumberNotation(FixedNotation)相同。scientific与setRealNumberNotation(ScientificNotation)同。left与setFieldAlignment(AlignLeft)相同。right与setFieldAlignment(AlignRight)相同。center与setFieldAlignment(AlignCenter)相同。endl与operator(‘\n’)和flush()相同。flush与flush()相同。reset与reset()相同。ws与skipWhiteSpace()相同。bom与setGenerateByteOrderMark(true)相同。 此外Qt提供了三个带有参数的全局操纵符qSetFieldWidth()、qSetPadChar()和qSetRealNumberPrecision()。 总结就是QFile用于文件的读写操作QByteArray用于处理二进制数据QDataStream用于二进制数据的序列化和反序列化而QTextStream用于文本数据的读写和处理。它们各自有不同的功能和适用场景根据具体需求选择合适的类进行操作。 用法及示例 当使用Qt中的QFile、QByteArray、QDataStream和QTextStream时可以按照以下示例来使用它们的成员函数 QFile的使用示例 #include QFile #include QDebug #include QApplicationint main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建一个QFile对象QFile file(data.txt);// 打开文件以进行写入if (file.open(QIODevice::WriteOnly)){// 写入数据到文件QString data Hello, World!;file.write(data.toUtf8());// 关闭文件file.close();}// 打开文件以进行读取if (file.open(QIODevice::ReadOnly)){// 读取文件中的数据QByteArray data file.readAll();// 将字节数组转换为字符串并输出QString str(data);qDebug() str;// 关闭文件file.close();}return a.exec(); }QByteArray的使用示例 #include QByteArray #include QDebug #include QApplicationint main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建一个QByteArray对象QByteArray byteArray;// 向字节数组添加数据byteArray.append(Hello);byteArray.append( );byteArray.append(World!);// 输出字节数组中的数据qDebug() byteArray;// 清空字节数组byteArray.clear();return a.exec(); }QDataStream的使用示例 #include QDataStream #include QFile #include QDebug #include QApplicationint main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建一个QFile对象QFile file(data.bin);// 打开文件以进行写入if (file.open(QIODevice::WriteOnly)){// 创建一个QDataStream对象并传入QFile对象QDataStream stream(file);// 写入整数到流中int value 42;stream value;// 关闭文件file.close();}// 打开文件以进行读取if (file.open(QIODevice::ReadOnly)){// 创建一个QDataStream对象并传入QFile对象QDataStream stream(file);// 从流中读取整数int value;stream value;// 输出取到的整数qDebug() value;//闭文件file.close();}return a.exec(); }QTextStream的使用示例 #include QTextStream #include QFile #include QDebug #include QApplicationint main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建一个QFile对象QFile file(data.txt);// 打开文件以进行写if (file.open(QIODevice::WriteOnly | QIODevice::Text)){// 创建一个QTextStream对象并传入QFile对象QTextStream stream(file);// 写入文本到流中stream Hello, World!;// 关闭文件file.close();}// 打开文件以进行读取if (file.open(QIODevice::ReadOnly | QIODevice::Text)){// 创建一个QTextStream对象并传入QFile对象QTextStream stream(file);// 从流中读取文本QString text stream.readAll();// 输出读取到的文本qDebug() text;// 关闭文件file.close();}return a.exec(); }示例分别使用QFile来读写文件、使用QByteArray处理字节数组、使用QDataStream进行二进制数据的序列化和反序列化、以及使用QTextStream进行文本数据的读写处理。 综合用法 #include QFile #include QByteArray #include QDataStream #include QTextStream #include QDebug #include QApplicationint main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建一个QByteArray对象QByteArray byteArray;// 向字节数组添加数据byteArray.append(Hello, World!);// 创建一个QFile对象QFile file(data.bin);// 打开文件以进行写入if (file.open(QIODevice::WriteOnly)){// 创建一个QDataStream对象并传入QFile对象QDataStream dataStream(file);// 将字节数组写入流dataStream byteArray;// 关闭文件file.close();}// 打开文件以进行读取if (file.open(QIODevice::ReadOnly)){// 创建一个QDataStream对象并传入QFile对象QDataStream dataStream(file);// 创建一个新的QByteArray对象QByteArray newDataArray;// 从流中读取字节数组dataStream newDataArray;// 创建一个QTextStream对象QTextStream textStream(newDataArray);// 读取字符串数据QString text textStream.readAll();// 输出读取到的字符串qDebug() text;// 关闭文件file.close();}return a.exec(); }输出结果 示例中首先创建一个QByteArray对象并向它添加数据。然后将这个字节数组写入到一个文件中使用QDataStream并将文件关闭。接下来再次打开文件并使用QDataStream从中读取字节数组。最后使用QTextStream读取字节数组中的字符串数据并将其输出到控制台。
http://www.zqtcl.cn/news/644424/

相关文章:

  • 广东圆心科技网站开发网站模板设计网页程序代码
  • 网站平台定制开发一级a做爰网站下载
  • 网站如何做流媒体wordpress导出软件
  • 电商网站流程图esp8266做网站
  • 细胞医疗 网站模版免费网址软件
  • app地推网企业seo解决方案
  • php网站转移网吧手机网站模版
  • 北京建设教育网站今天的国内新闻
  • 江苏省建设银行网站天心区网站建设公司
  • 网站分享设计网站备案收费么
  • 手机网站专题关于asp sql网站开发的书籍
  • 网站建设属于什么领域小米发布会在哪里看
  • 免费空间访客领取网站提高网站互动性
  • 湖北省市政工程建设网站汉中网站建设电话
  • 宁波大型网站推广服务丁香花在线电影小说观看
  • 合肥的网站建设公司哪家好百度旗下产品
  • 墨星写作网站阿里云购买网站登录
  • 做微网站公司知名网站设计
  • 宁波中科网站建设有限公司天津市建设 银行网站
  • 长沙建个网站一般需要多少钱化妆品网站建设方案项目书
  • 宁波外贸网站推广做网站如何选域名
  • 如何在百度上搜索到自己的网站提升关键词
  • asp net做网站建设英文网站的公司
  • 旅游英文网站 建设需求WordPress首页id
  • 南宁网站如何制作网站seo查询站长之家
  • 网站备案太麻烦门户网站模板
  • 九江建网站多少钱打开云南省住房和城乡建设厅网站
  • 合肥市门户网站wordpress登陆不上
  • 摄影网站在线建设办公室设计装修
  • 深圳市移动端网站建设游戏网站建设与策划方案