我自定义了一个类,类的声明和实现分离,项目结构如下:
其中include放头文件,src放源代码。
----------------------------华丽的分割线-----------------------
头文件代码:
#ifndef QT_DEMO_MYWIDGE_H
#define QT_DEMO_MYWIDGE_H
#include "QWidget"
class MyWidget : public QWidget {
Q_OBJECT // 宏定义, 可以使用信号与槽
public:
MyWidget(QWidget *parent = 0);
~MyWidget();
};
#endif //QT_DEMO_MYWIDGE_H
----------------------------华丽的分割线-----------------------
CMakeLists.txt部分代码:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_PREFIX_PATH "C:/Qt/6.5.2/mingw_64/lib/cmake")
find_package(Qt6 COMPONENTS
Core
Gui
Widgets
REQUIRED)
aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST} include/mywidge.h)
target_include_directories(${PROJECT_NAME} PRIVATE include)
target_link_libraries(qt_demo
Qt::Core
Qt::Gui
Qt::Widgets
)
----------------------------华丽的分割线-----------------------
我疑惑的是,已经通过target_include_directories将头文件包含进来的,为什么还要在add_executable中再包含一次?如果不在add_executable中添加头文件,编译会报错:undefined reference to `vtable for MyWidget'。
可是去掉target_include_directories又不也行(报其他错误),是什么原因呢?这样做不会重复添加头文件吗?
ps:ide是clion。
其中include放头文件,src放源代码。
----------------------------华丽的分割线-----------------------
头文件代码:
#ifndef QT_DEMO_MYWIDGE_H
#define QT_DEMO_MYWIDGE_H
#include "QWidget"
class MyWidget : public QWidget {
Q_OBJECT // 宏定义, 可以使用信号与槽
public:
MyWidget(QWidget *parent = 0);
~MyWidget();
};
#endif //QT_DEMO_MYWIDGE_H
----------------------------华丽的分割线-----------------------
CMakeLists.txt部分代码:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_PREFIX_PATH "C:/Qt/6.5.2/mingw_64/lib/cmake")
find_package(Qt6 COMPONENTS
Core
Gui
Widgets
REQUIRED)
aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST} include/mywidge.h)
target_include_directories(${PROJECT_NAME} PRIVATE include)
target_link_libraries(qt_demo
Qt::Core
Qt::Gui
Qt::Widgets
)
----------------------------华丽的分割线-----------------------
我疑惑的是,已经通过target_include_directories将头文件包含进来的,为什么还要在add_executable中再包含一次?如果不在add_executable中添加头文件,编译会报错:undefined reference to `vtable for MyWidget'。
可是去掉target_include_directories又不也行(报其他错误),是什么原因呢?这样做不会重复添加头文件吗?
ps:ide是clion。