QT學習day10---ini檔案、XML、MySQL資料庫連線
阿新 • • 發佈:2018-12-21
一、ini檔案
①語法:由節、鍵、值組成
- 節:section
- 引數:(鍵=值)
- ini檔案註釋一分號(;)開頭
②QSettings
QT中對ini檔案的操作使用到QSettings類
//函式 QSettings(ini路徑檔名, QSettings::IniFormat); //建構函式 setIniCodec(QTextCodec::codecForName("utf-8"));//設定編碼,utf-8格式 value(); //得到引數對應的文字 setValue(); //設定文字 beginGroup(section值); //開始一組section endGroup(); //結束一組section
下面演示一個Tab Widget控制元件對ini檔案的讀取與寫入
//ini檔案資料讀取到Tab Widget控制元件中 QFileInfo iniFileInfo = QFileInfo(iniPathString); //iniPathString為ini檔案的路徑 if(iniFileInfo.exists()) //如果ini檔案存在 { QSettings *config = new QSettings(iniPathString, QSettings::IniFormat); config->setIniCodec(QTextCodec::codecForName("utf-8"));//設定ini檔案為utf-8格式 for(int i = 0; i < 10; i++)//假設最大十個section { QString section = QString("teacher%1/").arg(i);//格式化 if(config->value(section + "name").toString().isEmpty()) { continue;//空資料不做處理 } currentRow = i; //當前行數 ui->tableWidget->insertRow(i);//插入新行 itemName = config->value(section + "name").toString(); currentColumn = 0; ui->tableWidget->setItem(currentRow, currentColumn, new QTableWidgetItem(itemName));//插入第0行第0列 itemName = config->value(section + "course").toString(); currentColumn = 1; ui->tableWidget->setItem(currentRow, currentColumn, new QTableWidgetItem(itemName));//插入0行第1列 itemName = config->value(section + "time").toString(); currentColumn = 2; ui->tableWidget->setItem(currentRow, currentColumn, new QTableWidgetItem(itemName));//插入第0行第2列 itemName = config->value(section + "read").toString(); currentColumn = 3; ui->tableWidget->setItem(currentRow, currentColumn, new QTableWidgetItem(itemName));//插入第0行第3列 } delete config; }
//將Tab Widget控制元件中的資料寫入ini檔案中 if(iniFileInfo.exists())//如果ini檔案存在 { QSettings *config = new QSettings(iniPathString, QSettings::IniFormat); config->setIniCodec(QTextCodec::codecForName("utf-8"));//告訴Qt ini檔案為utf-8格式 for(int i = 0; i < ui->tableWidget->rowCount(); i++) { QString section = QString("teacher%1/").arg(i); config->beginGroup(section); //開始一組section config->setValue("name", ui->tableWidget->item(i, 0)->text()); config->setValue("course", ui->tableWidget->item(i, 1)->text()); config->setValue("time", ui->tableWidget->item(i, 2)->text()); config->setValue("read", ui->tableWidget->item(i, 3)->text()); config->endGroup(); } delete config; }
二、XML
①概念:可擴充套件標記語言,是一種標記語言。一般用於資料儲存、配置檔案儲存,(Qt的ui檔案就是xml)也可以跨平臺跨語言進行資料傳輸。
②語法:
- 文件宣告:<?xml version="1.0" encoding="utf‐8"?>
- 標籤成對存在,用<>包含,可以巢狀
③QT中操作XML語言
函式:QXmlStreamReader(讀流)、QXmlStreamWriter(寫流)
下面演示XML檔案的讀取與寫入
QFile file("./testRead.xml");
if (!file.open(QFile::ReadOnly | QFile::Text))
{
qDebug()<<"Error: cannot open file";
}
QXmlStreamReader reader; //讀流
reader.setDevice(&file);//把檔案塞進流
while (!reader.atEnd())//如果沒有讀到文件結尾,而且沒有出現錯誤
{
//讀取下一個記號,它返回記號的型別
QXmlStreamReader::TokenType type = reader.readNext();
//下面便根據記號的型別來進行不同的輸出
if (type == QXmlStreamReader::StartDocument)
qDebug() << reader.documentEncoding() << reader.documentVersion();//列印編碼方式
if (type == QXmlStreamReader::StartElement)//如果是開始標記
{
qDebug() << "<" << reader.name() << ">";
if((reader.attributes().hasAttribute("id"))&&(reader.attributes().hasAttribute("time")))
qDebug() << reader.attributes().value("id")<<" " <<reader.attributes().value("time");
}
if(type == QXmlStreamReader::EndElement)//如果是結尾標記
qDebug() << "</" << reader.name() << ">";
if (type == QXmlStreamReader::Characters && !reader.isWhitespace())
qDebug() << reader.text();
//listwidget->additem;
}
if (reader.hasError())//如果讀取過程中出現錯誤,那麼輸出錯誤資訊
{
qDebug() << "error: " << reader.errorString();
}
file.close();
QFile file("./testWrite.xml");
if (!file.open(QFile::WriteOnly | QFile::Text)) //建立方式寫
{
qDebug() << "Error: cannot open file";
}
QXmlStreamWriter stream(&file);//準備好流
stream.setCodec(QTextCodec::codecForName("utf-8"));//設定為utf-8編碼
stream.setAutoFormatting(true);
stream.writeStartDocument();//文件開始
stream.writeStartElement("teachers");//teachers
/*老王*/
stream.writeStartElement("teacher");
stream.writeAttribute("id", "01");//工號
stream.writeAttribute("time", "12:00");
stream.writeTextElement("name", QString::fromLocal8Bit("老王"));
stream.writeTextElement("book", QString::fromLocal8Bit("金瓶梅"));
stream.writeEndElement();
/* robort */
stream.writeStartElement("teacher");
stream.writeAttribute("id", "02");
stream.writeAttribute("time", "04:00");
stream.writeTextElement("name", "robort");
stream.writeTextElement("book", QString::fromLocal8Bit("葵花寶典"));
stream.writeEndElement();
/* 夏七 */
stream.writeStartElement("teacher");
stream.writeAttribute("id", "03");
stream.writeAttribute("time", "19:00");
stream.writeTextElement("name", QString::fromLocal8Bit("夏七"));
stream.writeTextElement("book", QString::fromLocal8Bit("紅樓夢"));
stream.writeEndElement();
stream.writeEndElement();//teachers
stream.writeEndDocument();//文件結束
file.close();
三、MySQL資料庫操作
Qt關聯,MySQL資料庫
- 拷貝dll到相關目錄
- pro檔案中新增sql模組