Qt初学者,一路磕绊,将两天来心得发一下聊以遣怀。

原创 2015年07月08日 08:51:05

初来乍到水平有限,想到啥说啥,不要见笑。

1 凡是使用信号槽的类,都必须是由QObject派生,否则编译直接报错。

2 MainWindow.obj : error LNK2019: 无法解析的外部符号 "private: void __thiscall CMainWindow::slotReadDataOut(void)" (?slotReadDataOut@CMainWindow@@AAEXXZ),该符号在函数 "public: virtual int __thiscall CMainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@CMainWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z) 中被引用

1>D:\on3000\src\vc\bus0703\bus_in\Debug\bus_in.exe : fatal error LNK1120: 1 个无法解析的外部命令

问题原因:头文件中声明了槽函数的存在,但是忘记在源文件重定义槽函数。

解决办法:定义响应槽函数即可。

3 报错:该文件已在源编辑器之外被修改,是否重新加载

  解决办法:菜单:“工具——选项——环境——文档”在“自动加载更改(如果已保存)”前勾选即可。

4 报错:1>d:\on3000\src\vc\bus0703\bus_out\MgrConfigOutDown.h(0): Warning: No relevant classes found. No output generated

问题原因:此类用到信号槽机制,在头文件中没有声明。

解决办法:在头文件中加  Q_OBJECT 即可。

5 信号槽链接声明位置

 个人总结就是在一个信号发出对象和槽响应对象都有效的地方,而且这个地方程序一运行就会调用到即可。

 一般选择在new一个新对象后把他相关的信号槽连接完善。

6 编写程序头文件时候在最后#endif后再换行一次,作用没体会到,但是这么用就好了(我师父说的)。

7 错误说明:

1>d:\on3000\src\vc\bus0703\bus_out\mgrsocketoutdown.h(34) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\on3000\src\vc\bus0703\bus_out\mgrsocketoutdown.h(34) : warning C4183: “signalDataFromOutDown”: 缺少返回类型;假定为返回“int”的成员函数

问题原因:信号函数声明没有加void类型。

问题解决:从原来的signalDataFromOutDown();前边加一个void改为:void signalDataFromOutDown();

8 错误说明:

1>d:\on3000\src\vc\bus0703\bus_out\mgrsocketoutdown.cpp(151) : error C2275: “CNodeSocket”: 将此类型用作表达式非法
1>        d:\on3000\src\vc\bus0703\bus_out\nodesocket.h(7) : 参见“CNodeSocket”的声明

错误代码:

emit signalDisconnectOutDown(CNodeSocket* pSocket);

问题原因:发信号已经是在调用信号函数了,直接写参数就行了,上边代码形式类似于在声明参数。

问题解决:去掉声明部分:emit signalDisconnectOutDown(pSocket);

 

9 调试报错:error C2664: “bool QObject::connect(const QObject *,const char *,const QObject *,const char *,Qt::ConnectionType)”: 不能将参数 3 从“CMgrNodeServer”转换为“const QObject *”

错误代码:connect(this, SIGNAL(signalDataToMgrInUp(QByteArray &, int )), m_mgrNodeServerUp, SLOT(slotDataFromMainWindow(QByteArray & , int )));

错误原因:connect的第三个参数m_mgrNodeServerUp是个对象,而不是对象指针,参数类型不对,(楼主找了一小时啊。。。。)。

问题解决:修改后代码:connect(this, SIGNAL(signalDataToMgrInUp(QByteArray &, int )), &m_mgrNodeServerUp, SLOT(slotDataFromMainWindow(QByteArray & , int )));
其实就是多加个&。

归纳总结:参数3说明的是第三个参数有问题,也就是槽函数所在对象有问题,从CMgrNodeServer转换为const QObject*说明了自己用的是个对象,而实际需要的是对象指针!!!

10 这个地方错过两次,每次都找了好久,问题不大但很隐蔽。

所报错误:1>d:\on3000\src\vc\bus自己写的\bu_in_1.0\nodeserver.cpp(18) : error C2248: “CNodeSocket::CNodeSocket”: 无法访问 private 成员(在“CNodeSocket”类中声明)
1>        d:\on3000\src\vc\bus自己写的\bu_in_1.0\nodesocket.h(12) : 参见“CNodeSocket::CNodeSocket”的声明
1>        d:\on3000\src\vc\bus自己写的\bu_in_1.0\nodesocket.h(7) : 参见“CNodeSocket”的声明

问题原因:构造函数没有声明为public

总结归纳:构造函数如果不声明为公有会被默认为私有,这样就悲剧了。所以我们每次写构造函数和析构函数度的时候不能偷懒,public一定要加上!!!!!!!!!!!

 

11 C++编程隐蔽错误:error C2533: 构造函数不能有返回类型

 .h文件中类结尾没有分号(;)引起。

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

2017年——迷茫的一年

这是第一次在这个日子写这个年终总结,好像说错了,这应该是我第一次真正意义上对过去一年的总结,以前也只是想想。有人说不念过往,不惧未来,可是我做不到,我还是会时常想想过去的事情,把他们拿出来晒晒太阳,吹...
  • duxiao1256063327
  • duxiao1256063327
  • 2017年12月22日 22:22
  • 243

2_4_1:金币

总时间限制: 1000ms 内存限制: 65536kB 描述 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(...
  • judyge
  • judyge
  • 2015年05月06日 09:34
  • 2790

关于“一带一路舆情分析”的基础知识汇总

1、个人没开发过内容聚合类网站  2、什么是httpparser, 3、jsoup——一个超棒的java的HTML 解析器,提供API(一种用于java的各种包、类什么的)和处理数据,它可...
  • sunshine9895
  • sunshine9895
  • 2015年07月26日 14:51
  • 834

东野圭吾《流星之绊》读后感

又是一部东野圭吾的小说。     这篇小说最大的一个特点就是不用任何晦涩难懂的文学技巧,平铺直叙,读起来很顺畅。      主人公家是开饭馆的,招牌饭是“牛肉丁盖浇饭”,味道独一无二。     ...
  • masikkk
  • masikkk
  • 2013年03月06日 09:57
  • 5147

OpenJudge百炼习题解答(C++)--题2000:金币

题: 总时间限制: 1000ms 内存限制: 65536kB 描述 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(...
  • u014581901
  • u014581901
  • 2016年02月20日 22:20
  • 3520

Oracle的初学者入门心得

Oracle的初学者入门心得 Oracle的体系太庞大了,对于初学者来说,难免会有些无从下手的感觉,什么都想学,结果什么都学不好,所以把学习经验共享一下,希望让刚刚入门的人对Oracle有一个总体的认...
  • Drate
  • Drate
  • 2007年04月06日 10:58
  • 7110

java入门个人体会

这篇文章是我第一篇开同自己的博客的写的文章以前老是百度上找问题答案,度娘给的答案搜索结果导师csdn上的让我慢慢进入csdn 了,现在也应该为csdn做出一点贡献的时候到了。纯属个人心得体会。不喜勿喷...
  • qq_29232081
  • qq_29232081
  • 2017年02月28日 17:09
  • 173

国王将金币作为工资,发放给忠诚的骑士。

试题描述 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天...
  • yi__cao
  • yi__cao
  • 2017年11月12日 20:43
  • 926

木雕体会

著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:杨贵福 链接:http://zhuanlan.zhihu.com/younggift/20598423 来源:知乎 初学...
  • younggift
  • younggift
  • 2016年02月25日 02:12
  • 1111

【死磕Java并发】-----深入分析synchronized的实现原理

记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线...
  • chenssy
  • chenssy
  • 2017年02月05日 21:48
  • 17528
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt初学者,一路磕绊,将两天来心得发一下聊以遣怀。
举报原因:
原因补充:

(最多只允许输入30个字)