clion 新建QT项目
新建一个QT项目
- 设置为 可执行程序
- 设置文件的路径
- 设置C语言标准 QT的大版本号
-
项目生成两个文件
- CMakeList.txt cmake的文件
- main.cpp 项目主文件
-
CMakeList.txt
cmake_minimum_required(VERSION 3.22) project(demo1) set(CMAKE_CXX_STANDARD 11) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) add_executable(demo1 main.cpp) target_link_libraries(demo1 Qt5::Core Qt5::Gui Qt5::Widgets ) if (WIN32) set(DEBUG_SUFFIX) if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug") set(DEBUG_SUFFIX "d") endif () set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}") if (NOT EXISTS "${QT_INSTALL_PATH}/bin") set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..") if (NOT EXISTS "${QT_INSTALL_PATH}/bin") set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..") endif () endif () if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll" "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/") endif () foreach (QT_LIB Core Gui Widgets) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll" "$<TARGET_FILE_DIR:${PROJECT_NAME}>") endforeach (QT_LIB) endif ()
-
main.cpp
#include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication a(argc, argv); QPushButton button("Hello world!", nullptr); button.resize(200, 100); button.show(); return QApplication::exec(); }
-
注意此时编译 是失败的。
设置clion工具链(msvc)
-
- 首先点击CMake
- 点击小齿轮
- 点击CMake配置
-
- 设置工具链 这里设置为Visual Studio (需要提前安装好)
- 设置生成器 这里设置为Visual 16 2019 (跟上面保持一致 同时需要将QT的
D:\Qt\Qt5.12.12\5.12.12\msvc2017_64\bin
路径设置到环境变量) - 如果没有这个MSVC环境 只有MinGW的话 接着看后续的第二种配置
配置CMakeList.txt文件
-
删除系统判断文件(这个文件好像写的不对)
if (WIN32) set(DEBUG_SUFFIX) if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug") set(DEBUG_SUFFIX "d") endif () set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}") if (NOT EXISTS "${QT_INSTALL_PATH}/bin") set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..") if (NOT EXISTS "${QT_INSTALL_PATH}/bin") set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..") endif () endif () if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll" "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/") endif () foreach (QT_LIB Core Gui Widgets) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll" "$<TARGET_FILE_DIR:${PROJECT_NAME}>") endforeach (QT_LIB) endif ()
这个删除掉
-
添加QT路径
set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5")
-
将上述的路径改为自己的QT路径
-
cmake_minimum_required(VERSION 3.22) project(demo1) set(CMAKE_CXX_STANDARD 11) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) #设置QT的路径 set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5") find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) add_executable(demo1 main.cpp) target_link_libraries(demo1 Qt5::Core Qt5::Gui Qt5::Widgets )
修改后的CMakelist.txt文件
-
运行程序
-
重新生成一下cmake文件
- 先点击一下CMaKe
- 再点击一下选择圈圈
- 再等
【已完成】
-
运行代码
点击运行代码(如果不报错的话)
-
显示结果
- 有一个弹窗出现
- 在信息框没有报错
-
退出程序
- 点击弹窗的
X
可退出 这个是会正常退出 - 点击红色方框 可退出 这个是IDE强制终止
- 点击弹窗的
配置MinGW工具链
-
- 首先到
设置
中点开工具链
- 点击
+
- 在工具集上选择你的QT安装的位置的
tool
下的mingw路径 - 剩下的clion会自己检测到
- 点击应用
- 首先到
-
- 工具链:选择刚刚设置的QT中的工具链
- 生成器:选择Ninja 这个是mingw中会自带的
-
修改CMakelist.txt文件
-
将
set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5")
注释 -
相同位置加入
set(CMAKE_PREFIX_PATH "D:/Qt/Qt5.12.12/5.12.12/mingw73_64")
-
修改后的CMakeList.txt
cmake_minimum_required(VERSION 3.22) project(demo1) set(CMAKE_CXX_STANDARD 11) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) #设置QT的路径 #set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5") set(CMAKE_PREFIX_PATH "D:/Qt/Qt5.12.12/5.12.12/mingw73_64") find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) add_executable(demo1 main.cpp) target_link_libraries(demo1 Qt5::Core Qt5::Gui Qt5::Widgets )
-
-
配置编译器环境路径
- 点击编辑器
- 点击
编辑配置
-
- 点击添加一个
cmake应用程序
- 设置名称,方便自己认识
- 设置
环境变量
为:PATH=D:\Qt\Qt5.12.12\5.12.12\mingw73_64\bin
自己的QT的环境mingw的位置 - 点击确定
- 点击添加一个
-
- 点击三角
- 选择刚刚配置好的带有环境变量的cmake
- 就可以点击运行了
注意!!!!
- 配置的时候 都配置好了 但是还是报错,那就是需要把构建的目录删除了 再进行cmake一下
- 要是报链接不上link2001 link2009 的错误 大概率是QT搞的鬼 看一下是不是 环境配置错了 工具链跟生成器不搭配
文件组织,使得更加像QT create中的那么回事
-
创建文件夹
- include 用于包含外部的头文件
- lib 用于存放外部的库文件
- Source 用于存放源码
- headers 用于存放头文件
- Forms 用于存放UI文件
- 文件结构如图所示
-
新建UI
- 选择新建一个UI
- 文件组织分别如下
-
main.cpp修改如下
#include <QApplication> #include "headers/windowtest.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); windowTest w; w.show(); return QApplication::exec(); }
-
windowtest.cpp的头文件
#include "ui_windowTest.h"
修改为#include "Forms/ui_windowTest.h"
修改后的文件#include "headers/windowtest.h" #include "Forms/ui_windowTest.h" windowTest::windowTest(QWidget *parent) : QWidget(parent), ui(new Ui::windowTest) { ui->setupUi(this); } windowTest::~windowTest() { delete ui; }
-
点击运行
-
cmake小小优化
cmake_minimum_required(VERSION 3.22) project(clionTest) set(CMAKE_CXX_STANDARD 17) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) #set(CMAKE_PREFIX_PATH "D:/Qt/Qt5.12.12/5.12.12/mingw73_64") set(CMAKE_PREFIX_PATH "D:/Qt/Qt5.12.12/5.12.12/mingw73_64") #set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5") #set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/mingw73_64/lib/cmake/Qt5") find_package(Qt5 COMPONENTS Core Gui Widgets Network REQUIRED) include_directories( ${PROJECT_BINARY_DIR}/include ${PROJECT_BINARY_DIR}/Source/headers ) # 这里添加 头文件目录 #include_directories(src/subWidget) # 包含 ui.h #include_directories("${CMAKE_BINARY_DIR}/${PROJECT_NAME}_autogen/include") #递归查找源文件 #LIST_DIRECTORIES false 只输出文件,不需要文件夹 RELATIVE代表只要相对路径 file(GLOB_RECURSE SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} LIST_DIRECTORIES false Source/*.cpp Source/Forms/*.ui Source/headers/*.h) #添加额外的 源文件 例如资源文件等 #LIST(APPEND SRCS res.qrc) #add_executable(clionTest # Source/main.cpp # Source/mainwindow.cpp # Source/headers/mainwindow.h # Source/Forms/mainwindow.ui # Source/testmainwindow.cpp # Source/headers/testmainwindow.h # Source/Forms/testmainwindow.ui) #message(${SRCS}) message(STATUS "Enter cmake ${SRCS}") add_executable(${PROJECT_NAME} ${SRCS} ) target_link_libraries(clionTest Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Network )
- 加入自动寻找文件
file(GLOB_RECURSE SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} LIST_DIRECTORIES false Source/*.cpp Source/Forms/*.ui Source/headers/*.h)
- 打印信息
message(STATUS "Enter cmake ${SRCS}")
- 加入到可执行文件
add_executable(${PROJECT_NAME} ${SRCS} )
- 可以去除
add_executable(demo1 Sources/main.cpp Sources/windowtest.cpp Sources/headers/windowtest.h Sources/Forms/windowtest.ui)
这句手写文件
-
后续可能会有其他qrc文件的寻找方法 未完待续…