Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)

388 篇文章 20 订阅
140 篇文章 11 订阅

moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展。

moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有meta-object代码的.cpp文件。meta-object依赖信号与槽、RTTI、属性系统。

 

moc把.h文件生成的.cpp文件是参加编译和链接的。

用法

moc一般用法如下:

class MyClass : public QObject
{
    Q_OBJECT

public:
    MyClass(QObject *parent = 0);
    ~MyClass();

signals:
    void mySignal();

public slots:
    void mySlot();
};

moc通常实例对象属性,如下的例子。Q_PROPERTY()宏声明了一个对象属性,Q_ENUMS()声明了枚举类型,这些都可以在属性系统中使用写个QML界面,C++后端处理的同志们应该对这些不陌生。

如下面这个例子:

class MyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(Priority priority READ priority WRITE setPriority)
    Q_ENUMS(Priority)

public:
    enum Priority { High, Low, VeryHigh, VeryLow };

    MyClass(QObject *parent = 0);
    ~MyClass();

    void setPriority(Priority priority) { m_priority = priority; }
    Priority priority() const { return m_priority; }

private:
    Priority m_priority;
};

Q_CLASSINFO()宏,可以附加name/value在这个类的meta-object上,如下:

class MyClass : public QObject
{
    Q_OBJECT
    Q_CLASSINFO("Author", "Oscar Peterson")
    Q_CLASSINFO("Status", "Active")

public:
    MyClass(QObject *parent = 0);
    ~MyClass();
};

moc工具将会把mysqlClass.h转换为moc_myclass.cpp。将会参与程序编译的过程。

 

如何在makefile中添加moc相关代码

官方推荐使用qmake生成makefile。

如果自己创建的makefile下面是包含moc处理的一点小建议:

如果是使用GNUmake,参考下面的代码:

moc_%.cpp: %.h
        moc $(DEFINES) $(INCPATH) $< -o $@

简便写法,可以参考下面的代码:

moc_foo.cpp: foo.h
        moc $(DEFINES) $(INCPATH) $< -o $@

还需要把moc_foo.cpp加到SOURCES中,以及moc_foo.o和moc_foo.obj在OBJECTS中。

 

命令选项

 

这里只提下 -o 后面是文件名

 

 

下面是个人对这个moc的用法,主要是修改makefile,非qmake生成makefile

 

 

原因是这样的,公司里面好些大佬,都是老一辈的程序员。从0几年都开始用Qt了,当时在linux上使用pro还不是很普及,都喜欢搞makefile文件,这样我们这些新人维护起来就困难了。
在此阅读了下Qtmoc相关的文档,已对makefile进行了成功修改,在此记录下:
这里关于Qt的环境变量都是设置好的,在此不再介绍
在makefile文件中添加:
moc_%.cpp:%.h
	moc %< -o $@

意思是将moc 所有.h -o moc_对应文件名.cpp

$<为匹配%.h,$@为匹配到moc_%.cpp。

这样就不用一个一个对响应的Qt类进行操作了,使用Makefile脚本进行操作。

然后记得添加好其中的.o文件:

.cpp文件会编译成对应的.o文件。

最后make下,可以看到成功解析了Qt类。还自动把moc相关的删除了,挺人性化的

感觉程序员这行不容易啊,每天都是啃文档,知识储备,然后解决问题。

唉!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值