clion新建一个QT项目

clion 新建QT项目

新建一个QT项目

  1. image-20220906203032856
  • 设置为 可执行程序
  • 设置文件的路径
  • 设置C语言标准 QT的大版本号
  1. 项目生成两个文件

    image-20220906203459283

    • 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
                    "$<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 ()
    
    
  3. 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();
    }
    
    
  4. 注意此时编译 是失败的。

设置clion工具链(msvc)

  1. image-20220906203950434
    • 首先点击CMake
    • 点击小齿轮
    • 点击CMake配置
  2. image-20220906204425520
    • 设置工具链 这里设置为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
                    "$<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 ()
    

    这个删除掉

  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文件
    在这里插入图片描述

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

    image-20220906210327515

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

  3. 显示结果

    image-20220906210438543

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

    image-20220906210601480

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

配置MinGW工具链

  1. image-20220906211605527

    • 首先到设置中点开工具链
    • 点击+
    • 在工具集上选择你的QT安装的位置的tool下的mingw路径
    • 剩下的clion会自己检测到
    • 点击应用
  2. image-20220906211858228

    • 工具链:选择刚刚设置的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. 配置编译器环境路径

    image-20220906212630030

    • 点击编辑器
    • 点击编辑配置
  5. image-20220906212914565

    • 点击添加一个cmake应用程序
    • 设置名称,方便自己认识
    • 设置环境变量为:PATH=D:\Qt\Qt5.12.12\5.12.12\mingw73_64\bin自己的QT的环境mingw的位置
    • 点击确定
  6. image-20220906213212166

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

注意!!!!

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

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

  1. 创建文件夹

    image-20220906214028658

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

    image-20220906214600912

    • 选择新建一个UI
    • image-20220906214715429
    • 文件组织分别如下
    • 在这里插入图片描述
  3. 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();
    }
    
  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. 点击运行

    image-20220906215518916

  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文件的寻找方法 未完待续…

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小兮风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值