clion新建一个QT项目

clion 新建QT项目

新建一个QT项目

  1. clion新建一个QT项目_第1张图片
  • 设置为 可执行程序
  • 设置文件的路径
  • 设置C语言标准 QT的大版本号
  1. 项目生成两个文件

    clion新建一个QT项目_第2张图片

    • CMakeList.txt cmake的文件
    • main.cpp 项目主文件
  2. 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
                    "$/plugins/platforms/")
            add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                    COMMAND ${CMAKE_COMMAND} -E copy
                    "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
                    "$/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"
                    "$")
        endforeach (QT_LIB)
    endif ()
    
    
  3. main.cpp

    #include 
    #include 
    
    int main(int argc, char *argv[]) {
        QApplication a(argc, argv);
        QPushButton button("Hello world!", nullptr);
        button.resize(200, 100);
        button.show();
        return QApplication::exec();
    }
    
    
  4. 注意此时编译 是失败的。

设置clion工具链(msvc)

  1. clion新建一个QT项目_第3张图片
    • 首先点击CMake
    • 点击小齿轮
    • 点击CMake配置
  2. clion新建一个QT项目_第4张图片
    • 设置工具链 这里设置为Visual Studio (需要提前安装好)
    • 设置生成器 这里设置为Visual 16 2019 (跟上面保持一致 同时需要将QT的D:\Qt\Qt5.12.12\5.12.12\msvc2017_64\bin路径设置到环境变量)
    • 如果没有这个MSVC环境 只有MinGW的话 接着看后续的第二种配置

配置CMakeList.txt文件

  1. 删除系统判断文件(这个文件好像写的不对)

    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
                    "$/plugins/platforms/")
            add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                    COMMAND ${CMAKE_COMMAND} -E copy
                    "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
                    "$/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"
                    "$")
        endforeach (QT_LIB)
    endif ()
    

    这个删除掉

  2. 添加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文件

运行程序

  1. 重新生成一下cmake文件
    clion新建一个QT项目_第5张图片

    • 先点击一下CMaKe
    • 再点击一下选择圈圈
    • 再等【已完成】
  2. 运行代码

    clion新建一个QT项目_第6张图片

    点击运行代码(如果不报错的话)

  3. 显示结果

    clion新建一个QT项目_第7张图片

    • 有一个弹窗出现
    • 在信息框没有报错
  4. 退出程序

    clion新建一个QT项目_第8张图片

    • 点击弹窗的X 可退出 这个是会正常退出
    • 点击红色方框 可退出 这个是IDE强制终止

配置MinGW工具链

  1. clion新建一个QT项目_第9张图片

    • 首先到设置中点开工具链
    • 点击+
    • 在工具集上选择你的QT安装的位置的tool下的mingw路径
    • 剩下的clion会自己检测到
    • 点击应用
  2. clion新建一个QT项目_第10张图片

    • 工具链:选择刚刚设置的QT中的工具链
    • 生成器:选择Ninja 这个是mingw中会自带的
  3. 修改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
              )
      
      
  4. 配置编译器环境路径

    clion新建一个QT项目_第11张图片

    • 点击编辑器
    • 点击编辑配置
  5. clion新建一个QT项目_第12张图片

    • 点击添加一个cmake应用程序
    • 设置名称,方便自己认识
    • 设置环境变量为:PATH=D:\Qt\Qt5.12.12\5.12.12\mingw73_64\bin自己的QT的环境mingw的位置
    • 点击确定
  6. clion新建一个QT项目_第13张图片

    • 点击三角
    • 选择刚刚配置好的带有环境变量的cmake
    • 就可以点击运行了

注意!!!!

  • 配置的时候 都配置好了 但是还是报错,那就是需要把构建的目录删除了 再进行cmake一下
  • 要是报链接不上link2001 link2009 的错误 大概率是QT搞的鬼 看一下是不是 环境配置错了 工具链跟生成器不搭配

文件组织,使得更加像QT create中的那么回事

  1. 创建文件夹

    clion新建一个QT项目_第14张图片

    • include 用于包含外部的头文件
    • lib 用于存放外部的库文件
    • Source 用于存放源码
    • headers 用于存放头文件
    • Forms 用于存放UI文件
    • 文件结构如图所示
  2. 新建UI

    clion新建一个QT项目_第15张图片

    • 选择新建一个UI
    • clion新建一个QT项目_第16张图片
    • 文件组织分别如下
    • clion新建一个QT项目_第17张图片
  3. main.cpp修改如下

    #include 
    #include "headers/windowtest.h"
    
    int main(int argc, char *argv[]) {
        QApplication a(argc, argv);
        windowTest w;
        w.show();
    
        return QApplication::exec();
    }
    
  4. 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;
    }
    
  5. 点击运行

    clion新建一个QT项目_第18张图片

  6. 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)这句手写文件
  7. 后续可能会有其他qrc文件的寻找方法 未完待续…

你可能感兴趣的:(Clion,QT,Cmake,qt,开发语言,c++)