QT中的库类

目录

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是右下顶点。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值