一直以来我都是将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;
};
本文只为初学者或者在项目过程中遇到相关问题的朋友提供思路,不喜勿喷。
转载于:https://blog.51cto.com/langtuteng/1373832