gpt4 book ai didi

c++ - 使用CMake的Qt moc错误

转载 作者:行者123 更新时间:2023-11-28 05:46:15 24 4
gpt4 key购买 nike

我正在尝试编写一个 OpenCV 应用程序,使用 Qt 创建 GUI 并使用 CMake 生成 makefile。我遇到的问题是,当我尝试执行 make 命令时,出现错误:

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.)

好的。所以我想我应该尝试使用 qt4 中的 moc 而不是 qt5(我同时安装了 qt4 和 qt5)。果然我有 /usr/bin/moc-qt4 以及 /usr/bin/moc,所以我以为我需要做的就是 调用 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
)

######################### 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})

目前我的源文件和头文件还很空,但我也会发布它们。谁知道,也许错误就在那里。

主要.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

无论如何,我花了两天的大部分时间才走到这一步,非常感谢您的帮助!非常感谢!

最佳答案

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
)

如果可以,最好使用 QtQuick 而不是 QWidgets。

关于c++ - 使用CMake的Qt moc错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36142407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com