使用VS2012编译QT 5.2.1静态库
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用VS2012编译QT 5.2.1静态库,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5583字,纯文字阅读大概需要8分钟。
内容图文
Ok后配置就完成了。
PassOwnPtr<TextCodec> newTextCodec(const TextEncoding& encoding)
{
MutexLocker lock(encodingRegistryMutex());
ASSERT(textCodecMap);
TextCodecFactory factory = textCodecMap->get(encoding.name());
ASSERT(factory.function);
return factory.function(encoding, factory.additionalData);
}
上面那行 红色 的代码,encoding.name()的值是"ISO-8859-1",返回的factory却是空的,导致后面调用它的成员函数function时直接Access Violation。
在网上查了一下,发现这个问题早在Qt 4.8.2时就已经存在了,同样的工具链(vs2012 x86),同样的异常代码:
https://bugs.webkit.org/show_bug.cgi?id=90008
好像是HashMap的成员函数get的问题,还没有细查,依照上述链接中的解决方案修改就好了:
将函数:
static void addToTextCodecMap(const char* name, NewTextCodecFunction function, const void* additionalData)
{
const char* atomicName = textEncodingNameMap->get(name);
ASSERT(atomicName);
textCodecMap->add(atomicName, TextCodecFactory(function, additionalData));
}
修改为:
static void addToTextCodecMap(const char* name, NewTextCodecFunction function, const void* additionalData)
{
// const char* atomicName = textEncodingNameMap->get(name);
const char* atomicName;
TextEncodingNameMap::iterator pos;
for (pos = textEncodingNameMap->begin(); pos != textEncodingNameMap->end(); ++pos) {
if (strcmp(pos->key, name) == 0) {
atomicName = pos->value;
break;
}
}
ASSERT(atomicName);
textCodecMap->add(atomicName, TextCodecFactory(function, additionalData));
}
将函数:
PassOwnPtr<TextCodec> newTextCodec(const TextEncoding& encoding)
{
MutexLocker lock(encodingRegistryMutex());
ASSERT(textCodecMap);
TextCodecFactory factory = textCodecMap->get(encoding.name());
ASSERT(factory.function);
return factory.function(encoding, factory.additionalData);
}
修改为:
PassOwnPtr<TextCodec> newTextCodec(const TextEncoding& encoding)
{
MutexLocker lock(encodingRegistryMutex());
ASSERT(textCodecMap);
// TextCodecFactory factory = textCodecMap->get(encoding.name());
TextCodecFactory factory;
TextCodecMap::iterator pos;
for (pos = textCodecMap->begin(); pos != textCodecMap->end(); ++pos) {
if (strcmp(pos->key, encoding.name()) == 0) {
factory = pos->value;
break;
}
}
ASSERT(factory.function);
return factory.function(encoding, factory.additionalData);
}
注:Qt5Webkit的KeyValuePair的键/值使用的是key/value,不是原来的first/second。
原文:http://www.cnblogs.com/elitiwin/p/3581301.html
内容总结
以上是互联网集市为您收集整理的使用VS2012编译QT 5.2.1静态库全部内容,希望文章能够帮你解决使用VS2012编译QT 5.2.1静态库所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。