色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 汽車電子 > 設(shè)計(jì)應(yīng)用 > QT平臺(tái)下基于XML的界面設(shè)計(jì)與管理(下)

          QT平臺(tái)下基于XML的界面設(shè)計(jì)與管理(下)

          作者:?周珊珊 劉高高 時(shí)間:2017-02-24 來(lái)源:電子產(chǎn)品世界 收藏

          接上篇
          3 界面的實(shí)現(xiàn)與管理
          圖1(103頁(yè))所示為基于xml生成界面的大體流程,由 于本文選用pugixml庫(kù)進(jìn)行操作,因此在配置、加載以及修 改界面元素時(shí)均使用pugixml庫(kù)的基本操作方法,下面詳細(xì) 介紹。
          3.1 使用pugixml庫(kù)配置
          本文使用pugixml庫(kù)進(jìn)行參數(shù)配置。具體方法如下:首 先對(duì)pugixml進(jìn)行配置,pugixml的三個(gè)文件,可以只include 頭文件pugixml.hpp,CPP文件不用放到項(xiàng)目中,方法是, 在pugiconfig.hpp中:#define PUGI_HEADER_ONLY和
          #include "pugixml.cpp",將這兩行的注釋去掉即可。另外,如 果項(xiàng)目使用的是Unicode設(shè)置,則可以在pugicon句g.hpp中:
          #define PUGI_WCHAR_MODE將wchar模式打開(kāi)即 可。
          對(duì) 界 面 進(jìn) 行 參 數(shù) 配 置 , 即 x m l 節(jié) 點(diǎn) 讀 取 , 如 x m l 文 件

          本文引用地址:http://cafeforensic.com/article/201702/344434.htm

          圖5   修改參數(shù)配置

          params.xml:
          <?xml version="1.0" encoding="utf-8" ?>
          <root>
          <!-- 輸入?yún)?shù)配置 -->
          <form ip="10.2.134.243" port="80" action="sisserver.php">
          <input name="data_type" value="POI" />
          <input name="query_type" value="TQUERY" />
          <input name="category" value="" />
          3.2 使用pugixml庫(kù)加載
          pugixml提供幾個(gè)函數(shù)用于從不同地方加載xml數(shù)據(jù)。 這 些 函 數(shù) 使 用 超 快 非 驗(yàn) 證 的 解 析 器 , 這 個(gè) 解 析 器 不 完 全 遵 照W3C標(biāo)準(zhǔn),它可以加載任何有效的XML文檔,但沒(méi)有執(zhí) 行某些well-formedness檢查。雖然已經(jīng)很努力來(lái)排除無(wú)效 的XML文檔,但為了性能的原因有些驗(yàn)證沒(méi)有完全執(zhí)行。 一些XML轉(zhuǎn)換(例如: EOL處理或?qū)傩灾禈?biāo)準(zhǔn)化)將導(dǎo)致解 析 速 度 下 降 , 因 此 不 進(jìn) 行 這 些 驗(yàn) 證 。 對(duì) 于 絕 大 多 數(shù) X M L 文檔的不同解析選項(xiàng), 并不存在性能上的差異。 pug i x ml 支 持 當(dāng) 前 流 行 的 U n i c o d e
          編 碼 ( U T F- 8 , U T F- 1 6 ( 大 小 端 ) , U T F - 3 2 ( 大 端 ) , UCS-2也自然支持,因?yàn)樗?是UTF-16的子集)并自動(dòng)處 理 所 有 編 碼 轉(zhuǎn) 換 。 加 載 函
          數(shù)通過(guò)檢查XML數(shù)據(jù)的頭部分自動(dòng)進(jìn)行編碼檢測(cè)。
          1)從文件加載文檔 多數(shù)XML文檔來(lái)自文件,pugixml提供專門的函數(shù)從文
          件加載XML文檔,如下:
          xml_parse_result xml_document::load_句le(const char* path,unsigned int options = parse_default, xml_encoding encoding =
          encoding_auto);
          xml_parse_result xml_document::load_file(const wchar_t*
          path, unsigned int options = parse_default, xml_encoding encoding
          = encoding_auto);
          這些函數(shù)接受文件路徑作為第一個(gè)參數(shù),包括兩個(gè)可 選參數(shù),一個(gè)用于指定解析選項(xiàng),另一個(gè)指定輸入數(shù)據(jù)的編 碼類型。
          2)從內(nèi)存加載
          從內(nèi)存中加載文檔,首先需要為XML數(shù)據(jù)提供一個(gè)連 續(xù)的內(nèi)存塊;然后調(diào)用緩沖區(qū)加載函數(shù),如果需要,這些函數(shù)將處理編碼轉(zhuǎn)換,然后解析數(shù)據(jù)為XML文檔樹(shù)。
          3)從C++ IO流加載
          為 了 加 強(qiáng) 交 互 性 , p u g i x m l 提 供 了 從 任 何 實(shí) 現(xiàn) c + + std::istream接口的對(duì)象中加載文檔。這允許你從任何c++流 (例如文件流)或任何第三方實(shí)現(xiàn)(例如boost Iostream)中加載 文檔。
          具體來(lái)說(shuō),使用pugixml加載文件,方法是:
          首先,加載xml文件,使用xml_document類的load_句le接 口:
          std::strFile = "../test.xml";
          pugi::xml_document doc;
          if (!doc.load_句le(strFile.c_str()))
          {//return -1;}
          其次,加載xml格式的字符串,使用xml_document類的
          load接口:
          std::strText = "****";
          pugi::xml_document doc;
          if (!doc.load(strText.c_str()))
          {//return -1;}
          圖2、3(104頁(yè))為本文所討論平臺(tái)構(gòu)建軟件下,對(duì)其
          XML文件的參數(shù)配置,圖4(104頁(yè))為生成的樹(shù)形結(jié)構(gòu)界面。
          3.3 使用pugixml庫(kù)查詢及修改
          在XML描述界面信息的基礎(chǔ)上,用XML的查詢技術(shù)如 XQuery,XPath等進(jìn)行模型信息的查詢,可將之前系統(tǒng)開(kāi)發(fā) 獲得的界面信息用XML文件的形式存儲(chǔ)起來(lái),并且可以組 織形成一個(gè)界面信息庫(kù)。對(duì)于界面信息的查詢,可以分別從 名稱、描述信息、XML文檔中定義的元素和屬性等關(guān)鍵字 進(jìn)行查詢,將此查詢到的界面描述信息經(jīng)過(guò)修改和擴(kuò)展就可以加入到新工程的設(shè)計(jì)開(kāi)發(fā)
          中,從而可以大大提高開(kāi)發(fā) 效率。
          1)查詢:pugixml提供
          一 些 方 法 用 于 從 文 檔 中 獲 取 不 同 類 型 的 數(shù) 據(jù) 和 遍 歷 文 檔 。 除 了 X Pat h 相 關(guān) 的 函 數(shù),其它方法都沒(méi)有修改文 檔 , 。 其 中 有 兩 種 類 型 的 樹(shù) 數(shù)據(jù)句柄, x ml_node和x ml_ attribute;

          圖6    修改后生成界面
          2)修改:可以通過(guò)pugixml提供的函數(shù)修改文檔結(jié)構(gòu)或
          修改節(jié)點(diǎn)、屬性的數(shù)據(jù),這些函數(shù)負(fù)責(zé)管理內(nèi)存和結(jié)構(gòu)的完 整性,因此操作之后總能保持樹(shù)結(jié)構(gòu)的有效性。然而,也有 可能創(chuàng)建一個(gè)無(wú)效的XML樹(shù)(例如,添加兩個(gè)相同名字的屬 性或設(shè)置屬性/節(jié)點(diǎn)的名字為無(wú)效的字符串)。對(duì)于屬性的修 改,內(nèi)存消耗和性能都是經(jīng)過(guò)優(yōu)化的,如果你有足夠的內(nèi) 存從頭開(kāi)始創(chuàng)建文檔,稍后在保存它們到文件比起手寫(xiě)xml 文本沒(méi)有太大的開(kāi)銷。所有改變節(jié)點(diǎn)/屬性數(shù)據(jù)或結(jié)構(gòu)的成 員函數(shù)都是非const的,因此不能在const類型的句柄上調(diào)用 它們。然后你可以輕易地轉(zhuǎn)換const型句柄到非const型,僅 需要一個(gè)賦值操作,例如void foo(const pugi::xml_node& n) { pugi::xml_node nc = n; },因?yàn)槌A康臏?zhǔn)確性在這里主要提供 作為參考文檔而已。
          圖5、6為將XML參數(shù)修改之后的參數(shù)配置及其重新生 成的界面,和圖2、3、4進(jìn)行對(duì)比,可以看出,我們 將“設(shè) 備1”-“設(shè)備5”的名稱變更為“設(shè)備更新1”-“設(shè)備更新
          5”,在界面有新的顯示,以此類推,通過(guò)訪問(wèn)XML文件實(shí) 現(xiàn)對(duì)界面的管理。

          4 結(jié)束語(yǔ)
          本文討論的平臺(tái)下利用XML技術(shù)進(jìn)行界面的設(shè)計(jì)和 管理,主要利用pugixml庫(kù)進(jìn)行XML文件的具體操作,最終 成功生成界面。因此證明,基于XML 的用戶界面管理系統(tǒng) 為軟件開(kāi)發(fā)提供了有效且有力的支持,通過(guò)該系統(tǒng)不僅可以 使用戶界面描述信息與功能實(shí)現(xiàn)代碼相分離,簡(jiǎn)化用戶界面 的開(kāi)發(fā)與維護(hù),提高界面的開(kāi)發(fā)效率,還可以使軟件的最終 用戶獲得與開(kāi)發(fā)人員相同的界面操控能力,在系統(tǒng)運(yùn)行前和
          運(yùn)行過(guò)程中對(duì)用戶界面進(jìn)行配置和管理等操作。



          關(guān)鍵詞: QT XML

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉