关闭

Qt 手动生成moc 文件

993人阅读 评论(0) 收藏 举报
分类:

今天在我的一个Qt程序中新添加了一个菜单项和对应的signal和slot之后,编译运行发现出现这样的错误:
Object::connect No Such Slot…………………..
但是以前定义的signal和slot都能够正常工作。而我把这个菜单项对应的signal与以前定义的slot进行连接,也能够正常运行。
那为什么新添加的slot就不可以正常工作呢?

Google搜索了一下,可能导致这种错误的原因有一下几点:
1、查看类声明中有没有Q_OBJECT
要使用slot的类的声明中必须包含Q_OBJECT

2、我声明的函数要添加声明。比如:

private slots:  
    void open();  
    void toggleAniamting();  
    void toggleAutoPlay();  
    void toggleShowFullScreen();  
    void about();  
private slots:  
    void open();  
    void toggleAniamting();  
    void toggleAutoPlay();  
    void toggleShowFullScreen();  
    void about();  

3、那就是要重新生成moc_XXX.cpp文件。
我想起来了,我的VS和Qt配置不知道出了什么问题,moc不能被自动调用,必须手动生成这个moc文件。
凡是存在由Q_OBJECT标示过的class的.h文件,都会由moc生成一个相应的文件。
手动生成moc_XXX.cpp文件的方法:
首先删除原来的moc_XXX.cpp文件。
右键单击要生成moc文件的.h文件,点击属性->自定义生成步骤->常规,出现如下界面:
这里写图片描述
在命令行、输出和附加依赖项里面填上相应的内容。
然后右键单击这个.h文件,点击“编译”,便可生成对应的moc文件。
然后将生成的moc文件添加到源文件中。
重新编译运行工程文件即可。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:290855次
    • 积分:8569
    • 等级:
    • 排名:第2334名
    • 原创:575篇
    • 转载:43篇
    • 译文:1篇
    • 评论:64条
    博客专栏
    文章分类
    最新评论