您的位置 首页 知识

QT平台下根据XML的界面设计与办理(下)

接上篇3 界面的实现与管理图1(103页)所示为基于xml生成界面的大体流程,由 于本文选用pugixml库进行操作,因此在配置、加载以及修 改界面元素时均使用pugixml库的基本操作方法,下面详细

接上篇
3 界面的完成与办理
图1(103页)所示为根据xml生成界面的大体流程,由 于本文选用pugixml库进行操作,因而在装备、加载以及修 改界面元素时均运用pugixml库的根本操作办法,下面具体 介绍。
3.1 运用pugixml库装备
本文运用pugixml库进行参数装备。具体办法如下:首 先对pugixml进行装备,pugixml的三个文件,能够只include 头文件pugixml.hpp,CPP文件不必放到项目中,办法是, 在pugiconfig.hpp中:#define PUGIXML_HEADER_ONLY和
#include "pugixml.cpp",将这两行的注释去掉即可。别的,如 果项目运用的是Unicode设置,则能够在pugicon句g.hpp中:
#define PUGIXML_WCHAR_MODE将wchar方式翻开即 可。
对 界 面 进 行 参 数 配 置 , 即 x m l 节 点 读 取 , 如 x m l 文 件

图5   修正XML参数装备

params.xml:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<!– 输入参数装备 –>
<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库加载
pugixml供给几个函数用于从不同当地加载xml数据。 这 些 函 数 使 用 超 快 非 验 证 的 解 析 器 , 这 个 解 析 器 不 完 全 遵 照W3C规范,它能够加载任何有用的XML文档,但没有执 行某些well-formedness查看。尽管现已很尽力来扫除无效 的XML文档,但为了功用的原因有些验证没有彻底履行。 一些XML转化(例如: EOL处理或特点值规范化)将导致解 析 速 度 下 降 , 因 此 不 进 行 这 些 验 证 。 对 于 绝 大 多 数 X M L 文档的不同解析选项, 并不存在功用上的差异。 pug i x ml 支 持 当 前 流 行 的 U n i c o d e
编 码 ( U T F- 8 , U T F- 1 6 ( 大 小 端 ) , U T F – 3 2 ( 大 端 ) , UCS-2也天然支撑,由于它 是UTF-16的子集)并主动处 理 所 有 编 码 转 换 。 加 载 函
数经过查看XML数据的头部分主动进行编码检测。
1)从文件加载文档 大都XML文档来自文件,pugixml供给专门的函数从文
件加载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);
这些函数承受文件途径作为第一个参数,包含两个可 选参数,一个用于指定解析选项,另一个指定输入数据的编 码类型。
2)从内存加载
从内存中加载文档,首要需求为XML数据供给一个连 续的内存块;然后调用缓冲区加载函数,假如需求,这些函数将处理编码转化,然后解析数据为XML文档树。
3)从C++ IO流加载
为 了 加 强 交 互 性 , p u g i x m l 提 供 了 从 任 何 实 现 c + + std::istream接口的目标中加载文档。这答应你从任何c++流 (例如文件流)或任何第三方完成(例如boost Iostream)中加载 文档。
具体来说,运用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页)为本文所评论QT渠道构建软件下,对其
XML文件的参数装备,图4(104页)为生成的树形结构界面。
3.3 运用pugixml库查询及修正
在XML描绘界面信息的基础上,用XML的查询技能如 XQuery,XPath等进行模型信息的查询,可将之前体系开发 取得的界面信息用XML文件的方式存储起来,而且能够组 织构成一个界面信息库。关于界面信息的查询,能够分别从 称号、描绘信息、XML文档中界说的元素和特点等关键字 进行查询,将此查询到的界面描绘信息经过修正和扩展就能够加入到新工程的规划开发
中,然后能够大大进步开发 功率。
1)查询:pugixml供给
一 些 方 法 用 于 从 文 档 中 获 取 不 同 类 型 的 数 据 和 遍 历 文 档 。 除 了 X Pat h 相 关 的 函 数,其它办法都没有修正文 档 , 。 其 中 有 两 种 类 型 的 树 数据句柄, x ml_node和x ml_ attribute;

图6    修正后生成界面
2)修正:能够经过pugixml供给的函数修正文档结构或
修正节点、特点的数据,这些函数担任办理内存和结构的完 整性,因而操作之后总能坚持树结构的有用性。但是,也有 或许创立一个无效的XML树(例如,增加两个相同姓名的属 性或设置特点/节点的姓名为无效的字符串)。关于特点的修 改,内存耗费和功用都是经过优化的,假如你有满足的内 存从头开始创立文档,稍后在保存它们到文件比起手写xml 文本没有太大的开支。一切改动节点/特点数据或结构的成 员函数都对错const的,因而不能在const类型的句柄上调用 它们。然后你能够容易地转化const型句柄到非const型,仅 需求一个赋值操作,例如void foo(const pugi::xml_node& n) { pugi::xml_node nc = n; },由于常量的准确性在这里首要供给 作为参阅文档罢了。
图5、6为将XML参数修正之后的参数装备及其重重生 成的界面,和图2、3、4进行比照,能够看出,咱们 将“设 备1”-“设备5”的称号变更为“设备更新1”-“设备更新
5”,在界面有新的显现,以此类推,经过拜访XML文件实 现对界面的办理。

4 结束语
本文评论的QT渠道下使用XML技能进行界面的规划和 办理,首要使用pugixml库进行XML文件的具体操作,终究 成功生成界面。因而证明,根据XML 的用户界面办理体系 为软件开发供给了有用且有力的支撑,经过该体系不只能够 运用户界面描绘信息与功用完成代码相别离,简化用户界面 的开发与保护,进步界面的开发功率,还能够使软件的终究 用户取得与开发人员相同的界面控制才能,在体系运转前和
运转过程中对用户界面进行装备和办理等操作。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/207175.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部