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();
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中去除空格的方法
- 去除字符串前面空格 使用正则表达式:
QSring.remove(QRegExp("^ +\s*"));
实例:
QString str = " aa “;//字符串aa前后各三个空格
str.remove(QRegExp(”^ +\s*"));
//运行结果: str="aa "; - 去除字符串后面空格
使用正则表达式:
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”;
————————————————