手动生成MOC文件

一直以来我都是将moc命令写成批处理文件,并且一直使用很正常,今早来要为一个类生成moc文件,批处理是直接由以前正常运行的批处理文件改成,应该是没有什么错误的,其结果却发现我所要的moc文件并没有生成.


原始头文件如下:

#pragma once
#include <QtGui/QWidget>
#include <QtCore/QMutex>
#include "QWDControl_Global.h"

//自定的一个与QButtonGroup功能类似的管理窗体的类,功能接口参照QButtonGroup.
class QWDWidgetGrp
{

   Q_OBJECT

public:
   QWDWidgetGrp(void);
public:
   ~QWDWidgetGrp(void);

public:
   void AddWidget(QWidget* widget);//向窗口组中加入窗体
   void DelWidget(int iIndex);//将窗口组中的第几个窗体移去
   QWidget* Widget(int iIndex);//得到指定序号的窗体
   QWidget* ActivedWidget();//返回当前再在显示的窗体
   int ActiveWidgetIndex();//当前激活窗体的序号
   int Id(QWidget* widget);//返回指定窗体的序号,如果没有找到该窗体则返回-1
   void SetId(QWidget* widget,int iIndex);//择时定窗体的序号

public slots:
   void ShowWidget(int iIndex);//按选择序号显示某一个窗体

private:
   QVector<QWidget*> m_Widgets;
   QMutex m_mutexLock;
   int m_CurWidgetIndex;
};


批片理文件如下:

moc QWDWidgetGrp.h -o ../src/QWDWidgetGrp.moc



经分析如果一个类想使用moc就必须继承于QObject.将头文件改成如下形式,生成moc文件成功.


//自定的一个与QButtonGroup功能类似的管理窗体的类,功能接口参照QButtonGroup.
class QWDWidgetGrp : public QObject
{
   Q_OBJECT
public:
   QWDWidgetGrp(void);
public:
   ~QWDWidgetGrp(void);

public:
   void AddWidget(QWidget* widget);//向窗口组中加入窗体
   void DelWidget(int iIndex);//将窗口组中的第几个窗体移去
   QWidget* Widget(int iIndex);//得到指定序号的窗体
   QWidget* ActivedWidget();//返回当前再在显示的窗体
   int ActiveWidgetIndex();//当前激活窗体的序号
   int Id(QWidget* widget);//返回指定窗体的序号,如果没有找到该窗体则返回-1
   void SetId(QWidget* widget,int iIndex);//择时定窗体的序号

public slots:
   void ShowWidget(int iIndex);//按选择序号显示某一个窗体

private:
   QVector<QWidget*> m_Widgets;
   QMutex m_mutexLock;
   int m_CurWidgetIndex;
};


本文只为初学者或者在项目过程中遇到相关问题的朋友提供思路,不喜勿喷。


你可能感兴趣的:(Qt之moc文件的用法)