前言:一点关于moc的小知识
Qt是一个跨平台的可提供用户界面的应用程序开发框架,用于开发图形用户界面(GUI)或非图形用户界面。Qt使用标准的C++扩展包括信号与插槽,是面向对象的框架,可生成特殊的元对象编译器(Meta Object Compiler,moc)易于扩展并且允许组件编程。
那么问题来了,怎么样在设计好UI后生成可应用可编译的moc呢?
step1
在解决方案资源管理器中,选中UI文件,右键编译,会生成ui_xxx.h。
step2
新建xxx.h头文件,像这样,注意文件名的一致性。
#ifndef FEATURESELECT_H
#define FEATURESELECT_H
#include <QWidget>
#include <QDialog>
#include <QtWidgets/QMainWindow>
#include <QMouseEvent>
#include <QtGui>
#include "ui_FeatureSelect.h"
class FeatureSelect : public QDialog
{
Q_OBJECT
public:
FeatureSelect(QWidget *parent = 0);
~FeatureSelect();
private:
Ui::FeatureSelect ui;
public slots:
};
#endif // NORMALESTIMATE_H
step3
选中step2中新建的xxx.h文件,右键属性->配置属性->自定义生成工具->常规
根据自己实际情况修改命令行内容,如下:
"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-ID:\Python34\include" "-I$(ProjectDir)\." "-I$(PCL_ROOT)\include\pcl-1.8" "-I$(PCL_ROOT)\3rdParty\Boost\include\boost-1_59" "-I$(PCL_ROOT)\3rdParty\Eigen\eigen3" "-I$(PCL_ROOT)\3rdParty\FLANN\include" "-I$(PCL_ROOT)\3rdParty\OpenNI2\Include" "-I$(PCL_ROOT)\3rdParty\Qhull\include" "-I$(PCL_ROOT)\3rdParty\VTK\include\vtk-7.0"
根据自己实际情况修改说明内容,如下:
Moc%27ing pclvisualizer.h...
修改输出内容,如下:
.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
修改附加依赖项内容,如下:
$(QTDIR)\bin\moc.exe;%(FullPath)
最终得到如图:
step3
最后选中xxx.h,右键编译,即得到moc文件~