XML操作

QFile file("my.xml");//建立指向my.xml文件的QFile对象.
    if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) // 只写方式打开,并清空以前的信息
    	retutn 0;
    	
    QDomDocument doc;  //新建立一个QDomDocument对象,表示一个xml文档
    QDomProcessingInstruction instrution;  //添加处理指令
    instrution = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
    doc.appendChild(instrution);
        QDomElement root = doc.createElement("书库");
    doc.appendChild(root);  //添加根元素
            QDomElement book = doc.createElement("图书");
                QDomAttr id = doc.createAttribute("编号");
                id.setValue("1");
            book.setAttributeNode(id);  //图书可以有自己的属性
                QDomElement title = doc.createElement("书名");
                    QDomText text = doc.createTextNode("Qt");
                title.appendChild(text);
            book.appendChild(title);
                QDomElement author = doc.createElement("作者");
                             text = doc.createTextNode("shiming");//文本节点
                author.appendChild(text);  //QT&shuiming是用来描述书名和作者的,因此是孩子
            book.appendChild(author); //书名&作者是图书的孩子,他们是用来描述图书的
        root.appendChild(book);
            //添加第2个节点
            book = doc.createElement("图书");
                id = doc.createAttribute("编号");
                id.setValue("2");
            book.setAttributeNode(id);  //图书可以有自己的属性
                title = doc.createElement("书名");
                    text = doc.createTextNode("linux");
                title.appendChild(text);
            book.appendChild(title);
                author = doc.createElement("作者");
                     text = doc.createTextNode("yafei");//文本节点
                author.appendChild(text);  //QT&shuiming是用来描述书名和作者的,因此是孩子
            book.appendChild(author); //书名&作者是图书的孩子,他们是用来描述图书的
        root.appendChild(book);

    QTextStream out(&file);
    doc.save(out, 4);  //将文档保存到文件,4为子元素缩进字符数
    file.close();

QDomElement 里面的属性如何保证顺序不变化 qdomelement attribute_xml

QPlainTextEdit

QTextDocument *document=Q_NULLPTR;
    QTextBlock textBlock;
    document=ui->plainTextEdit->document();
    for(textBlock=document->begin();textBlock!=document->end();textBlock=textBlock.next()){
        qDebug()<<textBlock.text();

QVector

添加元素:      
    QVector<QString> strArray;         
    strArray.append("Hello"); //可以这样       
    strArray<<"World!"; //也可以这样        
    strArray<<"MyName"<<"is"<<"LEO";//也可以这样加上个元素        
    //现在strArray总共有5个字符串元素,strArray.count()==5     
遍历:
    QVector<QString>::iterator iter;  
    for (iter=strArray.begin();iter!=strArray.end();iter++)  
    {  
        qDebug() <<  *iter << "\0";
    }  
插入:
    strArray.insert(1,"这就是在hello和world之间添加");
删除:
    strArray.remove(1); //删除第一个元素,从0开始
    strArray.remove(1,3); //从1开始,删除3个元素
复制(取代):
    strArray.replace(1,"LEO"); //删除第一个元素,从0开始
上述,除了append()和replace()这两个函数外,其它函数会比较慢,因为在内存中移动一个位置时,这些函数会使向量容器内的对象要移动许多次!如果你想要一个能够在中部快速插入和删除的容器时,可以使用QList或者QLinkedList。
at()函数来读取对象会比使用operator[]()读取速度更快,因为这不会使用深度复制(deep copy)。
data()函数也可以访问保存在QVector的数据。这个函数会返回指向向量容器的第一个对象的指针。这样,你就可以使用指针来访问和修改向量容器内的对象。你可以使用指针将一个QVector向量容器传递给接收普通C++数组的函数。
contains()函数是用来查找向量容器内是否含有某个对象。
count()函数可以找出某个对象出现的次数。
resize()函数可以在任何时候改变QVector向量容器的体积。如果新的向量容器体积比以前的要大,QVector也许需要重新分配整个向量容器。QVector会预先分配两倍于实际数据的大小空间,从而减少再分配的次数。
reserve()函数,如果你事先知道向量容器大概包含多少个对象,你可以调用这个函数来预先分配一定的内存大小空间。
capacity()函数会告诉你向量容器所占内存的实际大小空间。

QT中QString与string的转化,解决中文乱码问题

QString str2qstr(const string str) 
{ 
    return QString::fromLocal8Bit(str.data()); 
} 
   
string qstr2str(const QString qstr) 
{ 
    QByteArray cdata = qstr.toLocal8Bit(); 
    return string(cdata); 
}

QString中去除空格的方法

  1. 去除字符串前面空格 使用正则表达式:
    QSring.remove(QRegExp("^ +\s*"));
    实例:
    QString str = " aa “;//字符串aa前后各三个空格
    str.remove(QRegExp(”^ +\s*"));
    //运行结果: str="aa ";
  2. 去除字符串后面空格
    使用正则表达式:
    QSring.remove(QRegExp("\s* +$"));
    实例:

QString str = " aa “;//字符串aa前后各三个空格
str.remove(QRegExp(”\s* +$"));
//运行结果: str=" aa";

3.去除字符串中首尾空格
(1)QString QString::simplified() const
返回一个字符串,移除从一开始到结尾的空白,每个序列内部的空格替换为一个空格(头尾的都去掉了)
实例

QString str = " aaa\t 44\ngood\r\n ";
str = str.simplified();
//结果: str == “aaa 44 good”;

‘\t’, ‘\n’, ‘\v’, ‘\f’, ‘\r’, ’ ’ 都属于空白的处理范围。

(2)QString QString::trimmed() const
返回一个字符串,移除从一开始到结尾的空白。也去掉头尾的空白
实例

QString str = " aaa\t 44\ngood\r\n ";
str = str.trimmed();
//结果:str == “aaa\t 44\ngood”;

3.删除所有空格
使用正则表达式:
QSring.remove(QRegExp("\s"));
实例

QString str = " a c d a “;//字符串aa前后各三个空格
str.remove(QRegExp(”\s"));
//运行结果: str=“acda”;
————————————————