当前位置: 代码迷 >> QT开发 >> Qt极度不稳定,想学Qt的望三思解决方案
  详细解决方案

Qt极度不稳定,想学Qt的望三思解决方案

热度:11   发布时间:2016-04-25 04:17:27.0
Qt极度不稳定,想学Qt的望三思
用开源的 Qt Service 写个服务,错误频出
之前由于引入的为Release版本而QtSQL用的是Debug版本,导致QVariant析构崩溃。
现在是这么一段代码

QString tempurl = "http://172.16.1.149";
{
    string strUrl = tempurl.toStdString();
}

又是析构时崩溃(}这句崩溃)
这种崩溃最菊花紧了,明明是很正确的语句,想修复都无从下手
配置方面参照了新建的一个工程(执行这两行代码可行),依然崩溃。
Qt太多初学者不能解决的析构问题了,倍感压力,这破服务要是早用C++和STL写会少多少调试时间!
而且Qt只是入门快,想深入实在是难,作为新技术,技术著作又没几篇,配置之类的文章也甚少
三思哪同学们!
------解决方案--------------------
引用:
QString在转成STL string 的时候崩溃的。


你可以贴出可以重现这种问题的最简代码,单就Qt方面来说,这没什么神秘的


inline std::string QString::toStdString() const
{ const QByteArray asc = toAscii(); return std::string(asc.constData(), asc.length()); }


Qt源码很简单,一个unicode字符串,编码为某种字节流(受用户控制),然后使用该字节流 构造一个标准的 std::string 并返回

题外:

而你这个抱怨的问题,似乎更像是C++造成的(而不是Qt),比如,你的代码各部分是不同的C++编译器编译的(不同的厂商提供或相同厂商的不同版本)。还有不同的编译选项等等

------解决方案--------------------
MSDN:

Caution: Do not mix static and dynamic versions of the run-time libraries. Having more than one copy of the run-time libraries in a process can cause problems, because static data in one copy is not shared with the other copy. The linker prevents you from linking with both static and dynamic versions within one .exe file, but you can still end up with two (or more) copies of the run-time libraries. For example, a dynamic-link library linked with the static (non-DLL) versions of the run-time libraries can cause problems when used with an .exe file that was linked with the dynamic (DLL) version of the run-time libraries. (You should also avoid mixing the debug and non-debug versions of the libraries in one process.)
------解决方案--------------------
你的应用程序使用 MTd 编译的
你的应用程序使用 QtCored4 这个动态库(Qt 默认是 MDd 编译的)
  相关解决方案