使用CMAKE的QT MOC错误 [英] QT MOC error using CMAKE

查看:3054
本文介绍了使用CMAKE的QT MOC错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一个OpenCV应用程序,使用QT创建GUI并使用CMAKE生成makefile。我有的问题是,当我尝试执行make命令,我得到的错误:



#error这个文件是使用moc从5.2.1。它不能与这个版本的Qt的包含文件(该moc已经改变太多了。)



...所以我想我应该尝试使用moc从qt4而不是qt5这个(我有qt4和qt5安装)。确切的,我有/ usr / bin / moc-qt4以及/ usr / bin / moc,所以我想我所需要做的是 invoke sudo update-alternatives --config moc 但我得到的是 update-alternatives:error:no alternatives for moc 。嗯...



所以我认为问题是与版本的qt或在我的CMakeLists.txt,所以这里是我使用的代码:

  cmake_minimum_required(VERSION 2.8.9)
project(Vigil)


include_directories (
build
src
inc
uis


################ #########配置OpenCV包含内容########################

FIND_PATH(CV_INCLUDE_DIR cv。 h
/ usr / include / opencv


MESSAGE(状态OpenCV:CV路径:$ {CV_INCLUDE_DIR})

FIND_PATH(CVAUX_INCLUDE_DIR cvaux.h
/ usr / include / opencv
/ usr / local / include / opencv
/ usr / local / include / opencv / cvaux / include
/ usr / include / opencv / include


MESSAGE(状态OpenCV:CVAux路径:$ {CXCORE_INCLUDE_DIR})

FIND_PATH(CXCORE_INCLUDE_DIR cxcore.h
/ usr / include / opencv
/ usr / local / include / opencv
/ usr / local / include / opencv / cxcore / include


MESSAGE状态OpenCV:CXCore路径:$ {CVAUX_INCLUDE_DIR})

FIND_PATH(HIGHGUI_INCLUDE_DIR highgui.h
/ usr / include / opencv
/ usr / local / include / opencv /其他的lib / highgui
/ opt / local / include / opencv
/ usr / local / include / opencv


MESSAGE(状态OpenCV:HighGUI Path: $ {HIGHGUI_INCLUDE_DIR})

FIND_LIBRARY(CV_LIB NAMES opencv_imgproc PATHS
/ usr / lib
/ usr / local / lib
/ usr / lib64
/ usr / local / lib64


MESSAGE(状态OpenCV:CV Lib:$ {CV_LIB})

FIND_LIBRARY(CXCORE_LIB NAMES opencv_core PATHS
/ usr / lib
/ usr / local / lib
/ usr / lib64


MESSAGE(状态OpenCV:CXCore Lib:$ {CXCORE_LIB} )

FIND_LIBRARY(HIGHGUI_LIB NAMES opencv_highgui PATHS
/ usr / lib
/ usr / local / lib
/ usr / lib64
/ usr / local / lib64


MESSAGE(状态OpenCV:HighGUI Lib:$ {HIGHGUI_LIB})

INCLUDE_DIRECTORIES(
$ {HIGHGUI_INCLUDE_DIR}
$ {OPENCV_INCLUDE_DIR}
$ {CXCORE_INCLUDE_DIR}
$ {CVAUX_INCLUDE_DIR}


################ #########配置QT包含###############################
FIND_PACKAGE(Qt5Widgets)
FIND_PACKAGE (Qt4 REQUIRED)
include_directories($ {QT_INCLUDES})
IF(QT4_FOUND)
MESSAGE(状态QT found:YES)
ELSE(QT4_FOUND)
MESSAGE (FATAL_ERROR
无法构建没有Qt4。请设置Qt4_DIR。)
ENDIF(QT4_FOUND)

#################添加源, headers和uis #########################

set(SOURCES $ {SOURCES}
main.cpp
VigilWidget.cpp


SET(HEADERS $ {HEADERS}
VigilWidget.h


SET(UI_FILES
bugView.ui



######################## Run UIC上的.ui文件######################### b#
$ b QT4_WRAP_UI(UI_HDRS $ {UI_FILES})
MESSAGE(状态UI_HEADERS:$ {UI_HDRS})
#,最后将运行moc:
#QT4_AUTOMOC($ {HEADERS})
QT4_WRAP_CPP(MOC_HEADERS $ {HEADERS})

########################################### ######

ADD_EXECUTABLE(Vigil $ {UI_HDRS} $ {SOURCES} $ {HEADERS} $ {QtApp_RCC_SRCS} $ {MOC_HEADERS})
/ pre>

我的源文件和头文件目前都是空的,但我也会发布它们,谁知道,也许错误是存在的。



main.cpp:

  #include< iostream> 
#includeVigilWidget.h
//#include< QApplication>

int main(int argc,char * argv []){
QApplication app(argc,argv);
std :: cout<< 测试;
VigilWidget vigil;
vigil.show();
}

VigilWidget.cpp:

  #includeVigilWidget.h

VigilWidget :: VigilWidget(QWidget * parent)
:QWidget(parent)
{
ui.setupUi(this);
}

VigilWidget.h:

  #ifndef _BGSUBTRACT_H_ 
#define _BGSUBTRACT_H_

#includeui_bugView.h
//#include< QObject>

class VigilWidget:public QWidget {
Q_OBJECT

public:

私有插槽:

信号:

私有插槽:

private:

Ui :: bugView ui;

};
#endif

无论如何,我花了两天的最好的一部分,真的很感谢一些帮助!非常感谢!

解决方案

Qt5配置:

  set(QT_VERSION_REQ5.2)
find_package(Qt5Core $ {QT_VERSION_REQ} REQUIRED)
find_package(Qt5Quick $ {QT_VERSION_REQ} REQUIRED)
find_package(Qt5Widgets $ {QT_VERSION_REQ } REQUIRED)
set(CMAKE_AUTOMOC ON)

add_executable($ {PROJECT_NAME} $ {SOURCES})
target_link_libraries($ {PROJECT_NAME}
Qt5 :: Core
Qt5 :: Quick
Qt5 :: Widgets

如果你可以更好地使用QtQuick而不是QWidgets。


I am trying to write an OpenCV application creating the GUI with QT and generating the makefiles using CMAKE. The problem that I have is that when I try to execute the "make" command, I get the error:

#error "This file was generated using the moc from 5.2.1. It cannot be used with the include files from this version of Qt. (The moc has changed too much.)"

Okay...so I guess I should be trying to use the moc from qt4 rather than qt5 for this (I have both qt4 and qt5 installed). Sure enough I have /usr/bin/moc-qt4 as well as /usr/bin/moc, so I would have thought all I need to do is invoke sudo update-alternatives --config moc, but all I get is update-alternatives: error: no alternatives for moc. Hmmm...

So I think the issue is either with the version of qt or in my CMakeLists.txt, so here is the code I used for that:

cmake_minimum_required(VERSION 2.8.9)
project (Vigil)


include_directories(
    build
    src
    inc
    uis
)

######################### Configure OpenCV inclusion ######################### 

    FIND_PATH(CV_INCLUDE_DIR cv.h
          /usr/include/opencv
          )

        MESSAGE(STATUS "OpenCV: CV Path : " ${CV_INCLUDE_DIR})

    FIND_PATH(CVAUX_INCLUDE_DIR cvaux.h
          /usr/include/opencv
          /usr/local/include/opencv
          /usr/local/include/opencv/cvaux/include
          /usr/local/include/opencv/include 
          )

    MESSAGE(STATUS "OpenCV: CVAux Path : " ${CXCORE_INCLUDE_DIR})

    FIND_PATH(CXCORE_INCLUDE_DIR cxcore.h
          /usr/include/opencv
          /usr/local/include/opencv
          /usr/local/include/opencv/cxcore/include
          )

    MESSAGE(STATUS "OpenCV: CXCore Path : " ${CVAUX_INCLUDE_DIR})

    FIND_PATH(HIGHGUI_INCLUDE_DIR highgui.h
          /usr/include/opencv
          /usr/local/include/opencv/otherlibs/highgui
          /opt/local/include/opencv
          /usr/local/include/opencv 
          )

    MESSAGE(STATUS "OpenCV: HighGUI Path : " ${HIGHGUI_INCLUDE_DIR})

    FIND_LIBRARY(CV_LIB NAMES opencv_imgproc PATHS
         /usr/lib
         /usr/local/lib
         /usr/lib64
         /usr/local/lib64
         )

    MESSAGE(STATUS "OpenCV: CV Lib: " ${CV_LIB})     

    FIND_LIBRARY(CXCORE_LIB NAMES opencv_core PATHS
         /usr/lib
         /usr/local/lib
         /usr/lib64
         )

    MESSAGE(STATUS "OpenCV: CXCore Lib: " ${CXCORE_LIB}) 

    FIND_LIBRARY(HIGHGUI_LIB NAMES opencv_highgui PATHS
         /usr/lib
         /usr/local/lib
         /usr/lib64
         /usr/local/lib64
         )

    MESSAGE(STATUS "OpenCV: HighGUI Lib: " ${HIGHGUI_LIB})      

    INCLUDE_DIRECTORIES(
        ${HIGHGUI_INCLUDE_DIR}
        ${OPENCV_INCLUDE_DIR}
        ${CXCORE_INCLUDE_DIR}
        ${CVAUX_INCLUDE_DIR}
        )

######################### Configure QT inclusion ######################### 
  FIND_PACKAGE(Qt5Widgets)
  FIND_PACKAGE(Qt4 REQUIRED)
  include_directories( ${QT_INCLUDES} )
  IF(QT4_FOUND)
    MESSAGE(STATUS "QT found : YES")
  ELSE(QT4_FOUND)
    MESSAGE(FATAL_ERROR
    "Cannot build without Qt4.  Please set Qt4_DIR.")
  ENDIF(QT4_FOUND)

######################### Add sources, headers and uis ######################### 

set(SOURCES ${SOURCES}
    main.cpp
    VigilWidget.cpp
)

SET( HEADERS ${HEADERS}
    VigilWidget.h
)

SET( UI_FILES
    bugView.ui
)


######################### Run UIC on .ui files #########################

QT4_WRAP_UI( UI_HDRS ${UI_FILES} )
MESSAGE(STATUS "UI_HEADERS: " ${UI_HDRS})
# and finally this will run moc:
#QT4_AUTOMOC(${HEADERS})
QT4_WRAP_CPP( MOC_HEADERS  ${HEADERS} )

#########################  ######################### 

ADD_EXECUTABLE(Vigil ${UI_HDRS} ${SOURCES} ${HEADERS} ${QtApp_RCC_SRCS} ${MOC_HEADERS})

My source and header files are pretty empty at the moment, but I will post them too. Who knows, maybe the error is there.

main.cpp:

#include <iostream>
#include "VigilWidget.h"
//#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    std::cout << "Testing";
    VigilWidget vigil;
    vigil.show();
}

VigilWidget.cpp:

    #include "VigilWidget.h"

    VigilWidget::VigilWidget(QWidget *parent)
        : QWidget(parent)
    {
        ui.setupUi(this);
    }

VigilWidget.h:

#ifndef _BGSUBTRACT_H_
#define _BGSUBTRACT_H_

#include "ui_bugView.h"
//#include <QObject>

class VigilWidget : public QWidget{
 Q_OBJECT

 public:

 private slots:

 signals:

 private slots:

 private:

 Ui::bugView ui;

};
#endif

Anyways, I have spent the best part of two days getting this far and would really really appreciate some help! Thanks a lot!

解决方案

Config for Qt5:

set(QT_VERSION_REQ "5.2")
find_package(Qt5Core ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Quick ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Widgets ${QT_VERSION_REQ} REQUIRED)
set(CMAKE_AUTOMOC ON)

add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME}
    Qt5::Core
    Qt5::Quick
    Qt5::Widgets     
)

And better use QtQuick instead of QWidgets if you can.

这篇关于使用CMAKE的QT MOC错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆