关于QT的诡异问题

欧阳春晖 2015-08-06 04:08:50
大家好,我在写一个高级编辑器,在Configure模块的时候,有对XML进行加载和解析,在验证过程遇到问题
具体代码如下


bool Configure::open(void)
{
if(!IsOpen())
{
ConfigureFileSource.setFileName(ConfigureFile);
if(ConfigureFileSource.open(QIODevice::ReadWrite))
{
if(XMLDocument.setContent(&ConfigureFileSource))
{
Root=XMLDocument.documentElement();
if(!Root.isNull())
{
QXmlSchemaValidator SchemaValidator;
QXmlSchema Schema;
QFile SchemaFile;
SchemaFile.setFileName("ConfigureSchema/ConfigureSchema.xsd");

if(SchemaFile.open(QIODevice::ReadOnly))
{
if(Schema.load(&SchemaFile))
{
SchemaValidator.setSchema(Schema);
if(SchemaValidator.validate(&ConfigureFileSource))
{
OpenFlag=true;
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}


...全文
232 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧阳春晖 2015-08-07
  • 打赏
  • 举报
回复
引用 3 楼 zlbgps 的回复:
bool Configure::open(void) { if(IsOpen()) { return false; } ConfigureFileSource.setFileName(ConfigureFile); if(false == ConfigureFileSource.open(QIODevice::ReadWrite)) { return false; } 这样的层要好看点点吧 你的保存与加载的文件完整性验证了吗? 建议保存的文件用其他编辑器打开看看是否存对了,加载完后看看文件完整性 断点跟踪在哪失败的?
配置文件我用netbeans编辑XML的时候是手动用那玩意校验过,没有报错,SchemaValidator.validate(&ConfigureFileSource)发生异常
  • 打赏
  • 举报
回复
bool Configure::open(void) { if(IsOpen()) { return false; } ConfigureFileSource.setFileName(ConfigureFile); if(false == ConfigureFileSource.open(QIODevice::ReadWrite)) { return false; } 这样的层要好看点点吧 你的保存与加载的文件完整性验证了吗? 建议保存的文件用其他编辑器打开看看是否存对了,加载完后看看文件完整性 断点跟踪在哪失败的?
  • 打赏
  • 举报
回复
通过上面的例子,写个最基本的hello world,把你的xml加进去测试 QByteArray data( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 这样来使用
  • 打赏
  • 举报
回复
你的XML头部是不是有问题,请参考

   QByteArray data( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                     "<xsd:schema"
                     "        xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
                     "        xmlns=\"http://qt.nokia.com/xmlschematest\""
                     "        targetNamespace=\"http://qt.nokia.com/xmlschematest\""
                     "        version=\"1.0\""
                     "        elementFormDefault=\"qualified\">"
                     "</xsd:schema>" );

    QXmlSchema schema;
    schema.load(data);

    if (schema.isValid())
        qDebug() << "schema is valid";
    else
        qDebug() << "schema is invalid";
出处 http://doc.qt.io/qt-4.8/qxmlschema.html
欧阳春晖 2015-08-07
  • 打赏
  • 举报
回复
引用 6 楼 aann8886an 的回复:
这个可能有用,可以试试看http://suo.im/1kurv
这是什么
欧阳春晖 2015-08-07
  • 打赏
  • 举报
回复
引用 3 楼 zlbgps 的回复:
bool Configure::open(void) { if(IsOpen()) { return false; } ConfigureFileSource.setFileName(ConfigureFile); if(false == ConfigureFileSource.open(QIODevice::ReadWrite)) { return false; } 这样的层要好看点点吧 你的保存与加载的文件完整性验证了吗? 建议保存的文件用其他编辑器打开看看是否存对了,加载完后看看文件完整性 断点跟踪在哪失败的?

<?xml version="1.1" encoding="UTF-8"?>

<Configure xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="Configure ConfigureSchema/ConfigureSchema.xsd"
	   xmlns="Configure">
    <Modules>
	<Document>
	    <DocumentSetting Type="MaxLoadSize" Setting="4G" /> <!--设置最大加载文件的大小是4G-->
	    <DocumentSetting Type="MaxTab" Setting="20" />  <!--设置最大tab大小是20-->
	</Document>
	<Cache>
	    <CacheSetting Type="DocumentCache" State="true" Timeout="10" /> <!--启用文档缓存,超时时间设置10s-->
	    <CacheSetting Type="PluginStateCache" State="true" Timeout="10" /> <!--启动插件状态缓存管理,超时时间10s-->
	    <CacheSetting Type="PluginConfigCache" State="true" Timeout="10" /> <!--启动插件配置缓存管理,超时时间10s-->
	</Cache>
    </Modules>
    <Plugin>
	<PlugServer Default="Default">
	    <ServerList>
		<Server ID="Default" IP="127.0.0.1" Port="4545" Protocol="PluginManager" /> <!--设置默认插件服务器镜像地址-->
	    </ServerList>
	</PlugServer>
	<Manager>
	    <PlugServer Mode="Off" DefaultSelect="Default" >    <!--关闭插件市场服务器-->
		<AutoSort Strategy="Fastest" />   <!--启动服务器列表映像自动排序-->
	    </PlugServer>
	</Manager>
    </Plugin>
</Configure>

欧阳春晖 2015-08-06
  • 打赏
  • 举报
回复
引用 1 楼 jiqiang01234 的回复:
这种代码风格,直接重写
我代码风格还算不错的,这只是我直接copy了一小段
jiqiang01234 2015-08-06
  • 打赏
  • 举报
回复
这种代码风格,直接重写

16,819

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧