1. 程式人生 > >QT學習day10---ini檔案、XML、MySQL資料庫連線

QT學習day10---ini檔案、XML、MySQL資料庫連線

一、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模組