关闭

Qt 手动生成moc 文件

1269人阅读 评论(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
查看评论

moc_xxxx.cpp 和 xxxx.moc

用qmake处理moc文件: qmake产生moc_xxxx.cpp并将其编译为可链接的moc_xxxx.o。在某些特定的情况下,可能比较好的用法是先产生moc_xxxx.cpp而不将其编译为*.o文件,然后moc_xxxx.cpp可以通过在xxxx.cpp中添加#include "mo...
  • u012150179
  • u012150179
  • 2013-11-06 23:35
  • 7897

VS下Qt生成ui_xxx.h和moc_xxx.cpp的路径设置

默认都是在文件夹GeneratedFiles下面,生成ui_xxx.h,对应就是UicDirectory,在该文件夹下面的debug或者release下,生成对应的moc_xxx.cpp,对应就是MocDirectory。
  • klqulei123
  • klqulei123
  • 2014-03-03 13:39
  • 1317

vs2010中自动生成Qt的moc文件的方法

Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系...
  • bzhxuexi
  • bzhxuexi
  • 2015-05-04 15:58
  • 1846

moc文件 如何生成的

合并代码,解决冲突后, 如果发现某个类的moc文件没有生成,或者 发现某个类的moc文件,没有出现在GenerateFiles文件夹下面,而是出现在了SourceFiles文件下面。 那么,出现两种问题的原因就是:解决冲突的时候,*.vcproj文件出错了。 *.vcproj文...
  • zhangbinsijifeng
  • zhangbinsijifeng
  • 2016-01-07 08:59
  • 625

手动生成Qt的moc文件的方法

命令行手动生成: 1. 首先点击windows的开始按钮, 在运行窗口中输入cmd; 2. 在弹出来的命令行窗口中进入Qt的安装目录, 一般是:     cd  C:\Qt\4.8.4\...
  • HuiLom
  • HuiLom
  • 2014-06-23 13:57
  • 2079

Qt 手动生成moc 文件

今天在我的一个Qt程序中新添加了一个菜单项和对应的signal和slot之后,编译运行发现出现这样的错误: Object::connect No Such Slot………………….. 但是以前定义的signal和slot都能够正常工作。而我把这个菜单项对应的signal与以前定义的slot进行连...
  • sinat_24229853
  • sinat_24229853
  • 2015-11-21 12:15
  • 1269

qt手动编译程序

如果要使用qt手动编译写好的程序,需要进行下面的操作: 1.安装mingw32程序,当然现在的qtcreator程序中都已经包含了mingw32-make程序,只需要将他的路径添加到环境变量中即可,例如我的路径为D:\Qt\qtcreator-2.2.1\mingw\bin,那么我需要在我的电脑的...
  • cgzhello1
  • cgzhello1
  • 2012-09-22 14:24
  • 1569

VS+Qt5生成moc文件

1.选择没有生成moc文件的头文件,右键,点击属性 2.在配置属性中选择常规,将项类型修改为“自定义生成工具” 3.修改自定义生成工具--常规中的“命令行”和“输出”两项 命令行:"$(QTDIR)\bin\moc.exe"  "%(FullPath)...
  • sjt091110317
  • sjt091110317
  • 2015-11-12 09:57
  • 2441

VS下QT工程不能生成moc文件的解决方法

选择要moc的类的头文件,鼠标右键,选择property->Item Type:将此项改为Custom Build Tool, 然后看到左边会变成Custom Build Tool: 选择Custom Build Tool->General:类比其他头文件添加...
  • wang15061955806
  • wang15061955806
  • 2017-04-12 22:23
  • 957

Qt自动生成moc文件

命令行生成moc文件的方式: cd C:/Qt/4.7.1/bin moc  .h文件群路径 -o 要生成的moc文件的全路径; 例如: VS中不是用addin创建的项目,自动生成moc文件的设置: 在VS的解决方案管理器里面,右键需要生成moc文件的头文件-打开属性...
  • xiaofengkuang
  • xiaofengkuang
  • 2013-08-16 13:25
  • 11721
    个人资料
    • 访问:394516次
    • 积分:9647
    • 等级:
    • 排名:第2187名
    • 原创:578篇
    • 转载:43篇
    • 译文:1篇
    • 评论:68条
    博客专栏
    文章分类
    最新评论