Qt极度不稳定,想学Qt的望三思

情歌而已 2011-08-11 08:53:59
用开源的 Qt Service 写个服务,错误频出
之前由于引入的为Release版本而QtSQL用的是Debug版本,导致QVariant析构崩溃。
现在是这么一段代码

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

又是析构时崩溃(}这句崩溃)
这种崩溃最菊花紧了,明明是很正确的语句,想修复都无从下手
配置方面参照了新建的一个工程(执行这两行代码可行),依然崩溃。
Qt太多初学者不能解决的析构问题了,倍感压力,这破服务要是早用C++和STL写会少多少调试时间!
而且Qt只是入门快,想深入实在是难,作为新技术,技术著作又没几篇,配置之类的文章也甚少
三思哪同学们!
...全文
6699 72 打赏 收藏 转发到动态 举报
写回复
用AI写文章
72 条回复
切换为时间正序
请发表友善的回复…
发表回复
hypercode 2013-07-01
  • 打赏
  • 举报
回复
经试验,确实qt的库是MDd的,在MTd的工程里用QT的东西的话,是会存在问题的。 求解决方案:要用MTd编译全部的qt库吗?PS:我们公司的工程都是MTd,用MDd编译自己的工程估计也有困难。
qiiii 2012-12-04
  • 打赏
  • 举报
回复
引用 70 楼 SlotLoveSignal 的回复:
来来来,再给大家个Qt菊花紧的例子: 数据库里面有这么个函数,写法应该没错吧。 C/C++ code?12345678910void DBfun(){ QMutexLocker LOCK(&m_mutex); //将此句注释掉,若数据库连接不上,直接跳过if //但是如果没有注……
lz浪费了我近半个小时来读贴,所以我觉得我有必要回复一下。 首先LZ的错误是DLL的版本和EXE的版本不统一,根本原因是用的不同的系统运行时库。这个问题在MFC中也同样存在,LINK的时候没有加验证可以说是微软的一个疏忽,但这不能算是BUG,只有你稍加了解使用正确就不会有这个问题。 你70L那个问题显而易见是你的使用问题,多线程访问资源加锁是必须的,你所描述的无限等待的现象也不过是非常常见的死锁错误,使用任何库都不可能凭空解决死锁。 LZ给人感觉非常傲慢非常自负,这贴里大部分人都比LZ水平高,回复你不是别人的义务,回复你是想帮助你而不是为了网络上的一点点积分。自以为是的态度很让人讨厌。
情歌而已 2011-08-24
  • 打赏
  • 举报
回复
来来来,再给大家个Qt菊花紧的例子:
数据库里面有这么个函数,写法应该没错吧。

void DBfun()
{
QMutexLocker LOCK(&m_mutex); //将此句注释掉,若数据库连接不上,直接跳过if
//但是如果没有注释掉,程序崩溃,提示莫名其妙的无限等待信息
if(m_db.open())
{
//do Something
m_db.close();
}
}


ASSERT failure in QMutex::lock: "Internal error, infinite wait has timed out.", file thread\qmutex.cpp, line 169

大家自己试试看。
格局视界 2011-08-23
  • 打赏
  • 举报
回复
准备入门的飘过,我是学嵌入式的,不知学qt有用吗,qt的应用方向
zyazy119 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 slotlovesignal 的回复:]

网上没有搜到相关的问题,比较隐晦,Qt没有提示编译链接问题,而是直接崩溃,这也是我说想学者慎入的原因。
[/Quote]

这。。。编译链接问题是qt能管的吗~~~
这是cl的问题吧。。。。。
情歌而已 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 66 楼 yeaiping 的回复:]
这是很多人的心理,一出问题,从来没考虑是自己代码的问题,只怀疑别人的东西,“极度”这两个词用的真是好啊
[/Quote]
第一,这个问题我是已经解决了然后才发这个帖子来探究下深层的原因。
第二,没有考虑自己代码的问题?这个贴子的主题是Qt应该加强自身的出错提示系统,不是什么东西都来个崩溃。并提醒初学者在学好C++有一定编程经验了再来学Qt。
请不要用“很多人的心理”来让自己特立独行,能做到提示的地方就应该提示,这是对一门语言的Debug系统很基本的要求了。换用库的问题Debug系统发现不了么?发现自己有东西不能正常析构不应该报错么?楼上要是觉得这样很合理的话,请不要用调试环境,直接文本编写代码,崩溃了直接从自己的代码去一行一行找原因。
yeaiping 2011-08-18
  • 打赏
  • 举报
回复
这是很多人的心理,一出问题,从来没考虑是自己代码的问题,只怀疑别人的东西,“极度”这两个词用的真是好啊
yeaiping 2011-08-18
  • 打赏
  • 举报
回复
危言耸听,我觉得挺好的,用了一年qt的说话。
Qt Service我也用过,Qt solution里面的所有模块几乎我都用过。

呵呵,挺好的,最好的是开源,可以调试源码,不行就报Bug,而且一些是断言造成的,很多都是用户自己的代码造成的

[Quote=引用楼主 slotlovesignal 的回复:]
用开源的 Qt Service 写个服务,错误频出
之前由于引入的为Release版本而QtSQL用的是Debug版本,导致QVariant析构崩溃。
现在是这么一段代码
C/C++ code

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


又是析构时崩溃……
[/Quote]
情歌而已 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 62 楼 ubunoon 的回复:]
1、首先,上面已经给出了具体使用Qt转换为std::string方法,直接转换,你的并不是标准的char*类型字符串,出错,也是应该的问题。
2、Qt中那么就尽量使用Qt的字符串,没有什么必要使用Qt外的字符串,如果为了和其他系统打交道,那么参考第一条就可以了。
[/Quote]
。。。求问你指的上面是哪里?肿么判定我是不是标准的char *字符串?
ubunoon 2011-08-17
  • 打赏
  • 举报
回复
1、首先,上面已经给出了具体使用Qt转换为std::string方法,直接转换,你的并不是标准的char*类型字符串,出错,也是应该的问题。
2、Qt中那么就尽量使用Qt的字符串,没有什么必要使用Qt外的字符串,如果为了和其他系统打交道,那么参考第一条就可以了。


htyoung 2011-08-17
  • 打赏
  • 举报
回复
QT 还是很好用的,如果有问题,先请看help,如果还有问题,去qt mail lists请教。在这里发牢骚解决不了问题的。如果你是个有经验的程序员,这个问题可能浪费了这么多时间,就应该选着另一个方法。
GuoYanshan 2011-08-16
  • 打赏
  • 举报
回复
QT其实不错
apsong 2011-08-16
  • 打赏
  • 举报
回复
人都是难免犯错的,工具应该尽量多的检查才是;
尤其是这种现象跟原因毫无关系的错误……
luoye 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 kevinmartin 的回复:]

说到底,就是一个不会用的人发现用不了,就说人家不好用。
[/Quote]

说的很对,支持你,像楼主这么用法用什么库都不稳定
nehc 2011-08-15
  • 打赏
  • 举报
回复
只是初学者慎入 ???

这句说的, 初学者慎入, 让Qt高手来入门?
ywh1008 2011-08-15
  • 打赏
  • 举报
回复
Linux的哲学与UNIX是一脉相通的,即简单管用,一个程序不必做的很大,但一定要干好自己份内的事,这样当很多这样的优秀程序结合起来时,庞大的任务将轻而易举的完成。

MFC等一些图形界面开发工具不过是和用户打交道,搞得像MFC那么复杂实在是得不偿失,真正的好程序,生命力长久的程序都是命令行下的,全部使用易于迁移的C/C++开发,写成后视效果发布响应的图形界面外壳,说白了,就是没有图形外壳那个程序也可以运行,有只不过为了方便用户。

不仅QT,MFC一类的所有东西尝试封装很多的东西,就同程度的失去程序的灵活性。

所以像QT,MFC这类东西,学习高封装的东西是很不划算的,不如系统调用,exec来的实在。
狮子小宝 2011-08-14
  • 打赏
  • 举报
回复
呵呵,没用过QT的飘过~
情歌而已 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 kevinmartin 的回复:]

说到底,就是一个不会用的人发现用不了,就说人家不好用。
[/Quote]
没错,就是这个样子,任何语言或者任何工具都是朝着易用、表述准确性、性能出发来改进,你会说机器语言好用么?
情歌而已 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 sungaoyong 的回复:]

引用 24 楼 slotlovesignal 的回复:
大神们,问题我重现了~

C/C++ code


#include <QtCore/QCoreApplication>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
QCoreApplication a(ar……
[/Quote]
看帖要全,我都已经结贴并且总结了。
nightwishfan 2011-08-14
  • 打赏
  • 举报
回复
菜鸟飘过,跟40楼想法一样……
加载更多回复(52)

16,173

社区成员

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

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