QT no such slot...

摘自:http://blog.csdn.net/lslxdx/article/details/7543793

今天在改一个继承自QObject的class,这个class中自然要使用些slot,之前就使用了,今天又往里加了两个signal,编译通过,运行时报“Object::connect: No suchslot”错,当然可以继续运行,只是signal的connect没有成功,试着把之前的slotconnect到signal,正常工作,为什么我新添加的不能用呢?!

Google之,网上通用的解决方法是:

1、看看你的类声明中有没有Q_OBJECT

2、你声明的函数要加声明,就是说

  1. private slots:  
  2. void xxxx();  

但是我都照办了,还是不行!无奈之下,直接看这个h文件生成的moc_xxx.cpp文件了,凡是存在由Q_OBJECT标示过的class的h文件,都会由moc生成一个相应的moc_xxx.cpp的文件,其中xxx是你的h文件的名字,这个工作在VS2008和QtCreator中是自动完成的,但是依稀记得我的这个class在VS2008中的moc阶段出现过错误,也就是说,如果moc失败,那么新加到class中的slots就不会被编译到moc_xxx.cpp文件中,以至于这个slot明明在class中存在,但就是无法被QObject发现和使用,所以就报“QObject::connect: No such slot”错了。

解决方法:

1、删掉原有的moc_xxx.cpp,应该是在你项目的目录中,找找就行。

2、在定义这个类的h文件上右键=》编译,这时候会生成一个新的moc_xxx.cpp文件,打开这个文件,看看里面有没有你新添加进去的那个slot,如果没有,说明VS在moc的时候出错了,应该自定义moc:

[plain] view plain copy
  1. 在VS的toolwindow.h解决方案窗口,找到toolwindow.h,右键,属性,配置属性,自定义生成步骤,常规,按如下命令填写:  
  2. 命令行 moc.exe toolwindow.h -o moc_toolwindow.cpp  
  3. 输出 moc_toolwindow.cpp  
  4. 附加依赖项 moc.exe toolwindow.h  

注意,我这里的h文件的名字是toolwindow.h。


世界再次充满了阳光~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值