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”;
————————————————