escu问题及解决

**************************************************************

Qt 出现“undefined reference to `vtable for”原因总结

-----------------------------------------------------------------

出错原因是在定义类的时候为了能使用signals和slot,在类定义的后面加了Q_OBJECT引起。 因为Q_OBJECT是一个宏,在不同的类中展开是不同的代码。

错误正是因为Makefile里没有将moc_XXX.cpp加入编译引起。

Makefile背后的原因是qmake,因为Qt的编译系统是通过qmake将.pro 文件转换成Makefile文件。当qmake扫描.h代码时发现有Q_OBJECT这样字眼的代码时,会将一个用moc生成moc_xxx.cpp代码 的依赖关系写到Makefile里。如果扫描时没有找到Q_OBJECT就不会生成额外的moc_xxx.cpp这样的文件。

出现最初一幕的原因是在执行qmake的时候.h代码里并没有O_OBJECT这样的代码。而执行make的时候.h里已经有Q_OBJECT了,解决的方法就是重新执行qmake,然后执行make.

高涛实际解决办法:
清理项目;
删除掉makefile文件。

 

**************************************************************

使用ftp的问题

-----------------------------------------------------------------

从服务器下载升级文件时,要求使用进度条功能,正好ftp提供了相应功能,对应的函数为S_egetProgressVal。
测试了下,大概可以用,该函数会不断地被ftp功能调用,并且会传回进度值。
但是,仔细测试后,发现:在下载完成后S_egetProgressVal才会被调用。
经检查,原因为,我在使用ftp_get后,通过一个while循环来判断是否下载完成了(通过变量g_iFTPSendLogFileResult),
而这样做阻塞了该线程,导致S_egetProgressVal不能被及时调用。
修改为:执行ftp_get后,如果下载完成,在FtprevalueReport函数中可以得到结果,这是以异步的方式得到结果的,因此不会阻塞。

结论:ftp_get后最好不要由其他内容

**************************************************************

使用shell执行命令的问题

-----------------------------------------------------------------

想执行的命令为:

ll

错误提示为未找到命令。

原因:

ll是ls -l 的 别名,似乎不能用别名。

posted on 2018-03-01 19:22  坚强地活着  阅读(245)  评论(0编辑  收藏  举报

导航