QT中的库类

2023-11-16

目录

QFile详解(文件如果不存在则创建、判断文件是否存在、获得文件的各种详细信息、读写文件)

1、QFile文件如果不存在则创建的方法

2、QFileInfo的方法获得文件的各种详细信息

 3、QFile读写文件的内容

QTextStream 的简单理解

1、QTextStream类提供了使用QIODevice读写文本的基本功能。

2、除了QTextStream的构造函数,还要常用的一些方法

3、通常有三种方式来读文本文件:

QString类详解

QTextCodec

QDomDocument

一、描述

QDomElement类的使用

关于控件的Left 、Top、Width和Height属性


QFile详解(文件如果不存在则创建、判断文件是否存在、获得文件的各种详细信息、读写文件)

1、QFile文件如果不存在则创建的方法

        QFile f("./1234.ini");
        if(!f.open(QIODevice::Append))
        {
            return 0;
        }

open里的打开模式为QIODevice::WriteOnly、QIODevice::ReadWrite、QIODevice::Append这三种的话,文件不存在则会自动创建出一个空文件出来。其他打开模式就不行。已测试。

open打开的几种模式如下:
QIODevice::ReadOnly    以只读方式打开文件
QIODevice::WriteOnly    只写方式
QIODevice::ReadWrite    读写方式
QIODevice::Append    追加模式打开,新写入文件的数据添加到文件尾部
QIODevice::Truncate    截取方式打开文件,文件原有的内容全部被删除
QIODevice::Text    文本方式打开文件,读取时“\n”被自动翻译为换行符

这些取值可以用“|”组合使用,例如 QIODevice::ReadOnly | QIODevice::Text 表示以只读和文本方式打开文件。

2、QFileInfo的方法获得文件的各种详细信息

 补充:

 3、QFile读写文件的内容

    QFile file("./test.xml");
    if(!file.open(QIODevice::ReadWrite))
    {
        return 0;//打开文件失败
    }
    //读取文件的所有内容
    QByteArray array1 = file.readAll();
    qDebug() << array1;
    //按行读取
    while(!file.atEnd())
    {
        //方式1
        QByteArray array2 = file.readLine();
        qDebug() << array2;
        //方式2
        char buf[1024];
        qint64 lineLength = file.readLine(buf, sizeof(buf));
        if (lineLength != -1)
        {
            // the line is available in buf
            qDebug() << "行" << buf;
        }
        //方式三,读取速度相对于上面的会快一点
        QTextStream in(&file);
    	while (!in.atEnd()) {
        QString line = in.readLine();        
    }
    }
    /****写入文件****/
    //方式1
    QByteArray ba1 = "1236546";
    file.write(ba1);//叠加调用并不会换行
    //方式2
    QTextStream aStream(&file); //用文本流读取文件
    QString str="xsx";//叠加调用并不会换行
    aStream<< endl << str; //写入文本流,在字符的前面会换行
    
    str ="fefre";
    aStream<< str << endl; //endl起到换行的作用,在字符后面有换行 
        
    file.close();

注:有的写入要达到换行的效果时,open的时候要加入QIODevice::Text这种模式.

QTextStream 的简单理解

1、QTextStream类提供了使用QIODevice读写文本的基本功能。

QTextStream可以操作QIODevice上,支持QByteArray和QString。如果使用QTextStream的operators,可以方便的读写words,lines 和numbers. 对一般的文本,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 "
}

2、除了QTextStream的构造函数,还要常用的一些方法

例如:
setDevice() : 设置设备
setString(): 设置字符串
seek():查找位置
atEnd():返回是否还有数据可读
flush():清空写缓存区

QTextStream 使用的是Unicode 缓存,Qt中的QTextCodec类 可以支持各种字符集。

3、通常有三种方式来读文本文件:

    chunk By chunk(块读):readLine()和readAll()
    Word By Word(按字读):
    character By character(按字节读):
 

QString类详解

1 常用构造函数

    QString s1 = “Hello”;
    QString s2(“world”);
    QString s3 = s1;
    //使用数组, QChar的大小是两个字节
    QChar arr[] = {‘L’, ‘o’, ‘v’, ‘e’};
    QString s4(arr, 4);

每个对象打印出来的结果如下:

2 字符串与数值之间的转换

 3 添加字符串

 

 4 大小写转换

 5 长度

 6 其他常用函数

 判断空字符串的区别:

 

 若字符串为"123,aaa,999,ppp",当调用s,section(",", 0, 3)函数后:

 

QTextCodec

1.描述

Qt 使用 Unicode 来存储、绘制、操作字符串。 在许多情况下,可能希望处理使用不同编码的数据。

Qt 提供了 QTextCodec 类来帮助在非 Unicode 格式和 Unicode 之间进行转换。

QTextCodecs 可以用于将一些本地编码的字符串转换为 Unicode:

     QByteArray encodedString = "...";
     QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
     QString string = codec->toUnicode(encodedString);

将字符串从 Unicode 转换为本地编码:

     QString string = "...";
     QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
     QByteArray encodedString = codec->fromUnicode(string);

尝试以块的形式转换数据时必须小心,例如,当通过网络接收数据时,多字节字符可能会被分成两个块。这可能会导致字符丢失,最坏的情况是导致整个转换失败。在这些情况下使用的方法是为编解码器创建一个 QTextDecoder 对象,并使用这个 QTextDecoder 进行整个解码过程,如下所示:

     QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
     QTextDecoder *decoder = codec->makeDecoder();
     
     QString string;
     while (new_data_available())
     {
         QByteArray chunk = get_new_data();
         string += decoder->toUnicode(chunk);
     }
     delete decoder;

QTextDecoder 对象维护块之间的状态,因此即使多字节字符在块之间拆分也能正常工作。
 

QDomDocument

一、描述

QDomDocument 类表示整个 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的主要访问。

由于元素、文本节点、注释、处理指令等不能存在于文档的上下文之外,因此文档类还包含创建这些对象所需的工厂函数。创建的节点对象有一个 ownerDocument() 函数,该函数将它们与创建它们的上下文中的文档相关联。

解析的 XML 在内部由对象树表示,可以使用各种 QDom 类访问这些对象树。所有 QDom 类只引用内部树中的对象。一旦最后一个引用它们的 QDom 对象或 QDomDocument 本身被删除,DOM 树中的内部对象将被删除。

元素、文本节点等的创建是使用此类中提供的各种工厂函数完成的。使用 QDom 类的默认构造函数只会导致无法操作或插入文档的空对象。

注意:如果 XML 文档很大,DOM 树最终可能会消耗大量内存。对于此类文档,QXmlStreamReader 类可能是更好的解决方案。

QDom 类通常如下使用:

   QDomDocument doc("mydocument");
    QFile file("mydocument.xml");
    if (!file.open(QIODevice::ReadOnly))
        return;
    if (!doc.setContent(&file))
    {
        file.close();
        return;
    }
    file.close();
     
    QDomElement docElem = doc.documentElement();
     
    QDomNode n = docElem.firstChild();
    while(!n.isNull())
    {
        QDomElement e = n.toElement();
        if(!e.isNull())
        {
            cout << qPrintable(e.tagName()) << '\n';
        }
        n = n.nextSibling();
    }
     
    QDomElement elem = doc.createElement("img");
    elem.setAttribute("src", "myimage.png");
    docElem.appendChild(elem);

要使用 DOM 创建文档,请使用如下代码:

    QDomDocument doc("mydocument");
        QDomElement root = doc.createElement("MyML");
        doc.appendChild(root);
     
        QDomElement tag = doc.createElement("Greeting");
        root.appendChild(tag);
     
        QDomText t = doc.createTextNode("Hello World");
        tag.appendChild(t);
     
    //    QString xml = doc.toString();
        QFile file("demo.xml");
        file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
        QTextStream out(&file);
        out.setCodec("UTF-8");
        doc.save(out, 4, QDomNode::EncodingFromTextStream);
        file.close();

QDomElement类的使用

QDomElement类表示DOM树中的一个元素。
元素具有tagName ()以及与之关联的零个或多个属性。可以使用setTagName ()更改标签名称。
元素属性由QDomAttr对象表示,可以使用attrbute ()和attributeNode ()函数进行查询。您可以使用setAtribute ()和setAttributeNode ()函数设置属性。可以使用removeAttribute ()删除属性。这些函数有名称空间感知的等效项,即setAttributeNS ) , setAttributeNodeNS ()和removeAttributeNS ()。
如果您要访问节点的文本,请使用text (),例如

QDomElement e = //...
//...
Qstring s = e.text ( )

关于控件的Left 、Top、Width和Height属性

其中窗体的四个属性值,left 、top、width、和Height属性区别。

对于left和top是指该控件或是该窗体的左顶点。而width和height是右下顶点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT中的库类 的相关文章

随机推荐

  • pandas 数据结构

    Series常用操作 知道 Series创建 传入一个Python列表 如果传入的数据类型是统一的数字 那么最终的dtype类型是int64 如果传入的数据类型是统一的字符串 那么最终的dtype类型是object 如果传入的数据类型是多种
  • TensorFlow搭建CNN-LSTM混合模型实现多变量多步长时间序列预测(负荷预测)

    目录 I 前言 II CNN LSTM III 代码实现 3 1 数据处理 3 2 模型训练 测试 3 3 实验结果 IV 源码及数据 I 前言 前面已经写了很多关于时间序列预测的文章 深入理解PyTorch中LSTM的输入和输出 从inp
  • input标签限制只能输入数字

  • 操作系统实验:银行家算法(C语言)

    实验内容 某系统中进程P1 P2 P3 Pn 同时请求资源R1 R2 R3 Rn 已知t0时刻资源分配情况 参考下表 1 编写程序 分析当前系统状态是否安全 若系统安全 请输出安全序列 2 在系统安全的情况下 若有进程提出资源请求 如t1时
  • 人脸识别之caffe-face

    该论文为2016年的一篇ECCV ADiscriminative Feature Learning Approach for Deep Face Recognition 还是深圳先进院乔宇老师组的一篇 不管是思想还是效果都非常的棒 论文思想
  • Perl调用shell命令方法小结(system/反引号/exec)

    system 反引号 exec 为避免shell命令的特殊符号采用先变量定义的方法 system perl也可以用system调用shell的命令 它和awk的system一样 返回值也是它调用的命令的退出状态 root AX3sp2 ca
  • 单片机控制继电器实验

    单片机控制继电器实验 在各种自动控制设备中 都存在一个低压的自动控制电路与高压电气电路的互相连接问题 一方面要使低压的电子电路的控制信号能够控制高压电气电路的执行元件 如电动机 电磁铁 电灯等 另一方面又要为电子线路的电气电路提供良好的电隔
  • 如何安装以及用相关插件配置OBSIDIAN?

    之前看人推荐logseq就尝试了一下 吐槽跨设备同步难搞 然后被人种草了Obsidian 这几天使用下来感觉确实比logseq好用多了 第三方插件同步虽然有点冲突但大体上还好 现在考虑怎么去合理规划tag以及wiznote笔记的迁移 虽说感
  • 刷脸支付机会是留给敢迈出第一步的人

    从支付宝推出余额宝 花呗等功能大幅培养用户理财习惯 到微信支付通过微信红包打通朋友圈 微信支付和支付宝的擂台之战从未平息 面对10亿交易笔数到20亿的跨越 较量已经从扫码支付延伸至了各式各样的甚至难啃的场景 比如停车场无感支付 线下的刷脸支
  • Docker笔记(精简版)

    文章目录 初始Docker 学习背景 Docker解决依赖兼容问题 Docker解决操作系统环境差异 Docker架构 镜像和容器 DockerHub Docker架构 安装Docker 卸载 可选 安装Docker 启动docker 配置
  • VS静态编译C/C++解决程序丢失 VCRUNTIME140.dll

    VS静态编译C C 解决程序丢失 VCRUNTIME140 dll1VS静态编译C C 解决程序丢失 VCRUNTIME140 dll2VS静态编译C C 解决程序丢失 VCRUNTIME140 dll3VS静态编译C C 解决程序丢失 V
  • 【C++ 并发与多线程】std::thread类-为共享数据加锁 2

    正交 消除无关事务之间的影响 力求高内聚低耦合 死锁的概念略去不说 死锁有可能发生在使用多个互斥量的场景下 也可能存在没有使用互斥量的场景 两个线程都在等待对方释放互斥量 两个线程都调用了对方的join 函数 为了解决两个线程都在等待对方释
  • 实施前端微服务化的六七种方式

    微前端架构是一种类似于微服务的架构 它将微服务的理念应用于浏览器端 即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用 由此带来的变化是 这些前端应用可以独立运行 独立开发 独立部署 以及 它们应该可以在共享组件的同时进
  • 记一次Nginx代理Mysql服务的经历

    背景 根据组长背景描述 具备以下前提 1 Mysql服务器为 某A云厂商的RDS SAAS服务 但是不开通外网服务 2 EC2 服务器一台 某A云厂商LaaS服务 也不开通外网 3 阿里云服务器一台 这台服务器有服务需要连接Mysql服务
  • 多列索引

    单列索引与多列索引 索引可以是单列索引 也可以是多列索引 下面我们通过具体的例子来说明这两种索引的区别 假设有这样一个people表 CREATE TABLE people peopleid SMALLINT NOT NULL AUTO I
  • swiper实现无限滚动轮播、左右切换

    废话不多说 直接上代码 const mySwiper ref
  • 经典C语言程序设计100例,部分有个人注解

    经典C语言程序设计100例 程序1 题目 有1 2 3 4个数字 能组成多少个互不相同且无重复数字的三位数 都是多少 1 程序分析 可填在百位 十位 个位的数字都是1 2 3 4 组成所有的排列后再去 掉不满足条件的排列 当然这里的去掉并不
  • QT之读取文本文件中的GPS数据,并解析出经纬度

    include
  • Win10以管理员身份运行CMD命令提示符的四种方法

    方法一 1 我们可以在Windows10系统的开始菜单上 单击鼠标右键 这时候出现的菜单中 我们选择命令提示符 管理员 点击打开这样即可 方法二 1 点击开始菜单 然后界面中我们这里选择所有应用打开进入 如图所示 2 所有应用中 我们在Wi
  • QT中的库类

    目录 QFile详解 文件如果不存在则创建 判断文件是否存在 获得文件的各种详细信息 读写文件 1 QFile文件如果不存在则创建的方法 2 QFileInfo的方法获得文件的各种详细信息 3 QFile读写文件的内容 QTextStrea