原文链接
前言
开发桌面级应用程序上,QT
本身的兼容性架构做的非常不错,但是单纯从Qt Creator
开发的用户界面来说,确实不是很美丽,以习惯于Jetbrains
全家桶的开发来说,许多按键和工作习惯都需要调整,参考Qt6Cractor初始化。所以我们考虑在使用Qt
开发套件的情况下,在CLion
的用户界面下工作,就很舒适了
实现
qmake工程的处理
对于qmake
而言比较麻烦,因为CLion
本身是不支持qmake
直接构建的,所以这里有两个方案:
方案一:将工程转为CMake
,这个也是Qt
的相对推荐的方式,一则Qt
的源码的构建已经从qmake
改变为了Cmake
,参考Build System Changes in Qt 6
The Qt 5 build system was built on top of qmake. In Qt 6, we ported the build system to CMake.
其次,qmake
的构建方式可能在之后的版本中被弃用
qmake will still be supported in Qt 6 for user apps. But in Qt 7 it is likely to be completely dropped.
But cmake support is sure to get far more love now and int the future. So for long-term projects - better use cmake.
具体如果将qmake
转为CMake
可以参考官方博客Introducing qmake2cmake
pip install qmake2cmake && qmake2cmake_all camera-auth-pro/ --min-qt-version 6.0
即可在camera-auth-pro
目录下生成CMakeLists.txt
,这个方法只适用于Qt6
以上。Qt5
即以下版本,简单的项目就自行转换把,复杂的项目可以参考使用AUTOMOC
方案二:通过自定义编译命令的方式来进行编译,这里CLion
支持的是Compilation database方式配置,即compile_commands.json
。对于Compliation database
,我们在CMake
中我们可以使用cmake
的-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
命令参数,或者在CMakeLists.txt
中添加set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
来自动生成,或者使用Bear自动生成compile_commands.json
方案三:直接使用命令行编译和启动,这里要确认如果你按照了多个版本的Qt
或者Cmake
亦或C++
版本需要在环境变量中确认使用的是否为项目所需的各种版本,具体可以参考Qt
本身的配置:
可以在这里打开终端,测试命令的正确性,避免由于环境变量造成的构建失败。测试完成后将所需的环境变量配入系统或者CLion
即可
构建命令的一般样式为:C:/Qt/5.15.2/mingw81_32/bin/qmake.exe Z:\workspace\qt\camera-auth-pro\camera-auth-pro\camera-auth-pro.pro -spec win32-g++ "CONFIG+=debug" ; C:/Qt/Tools/mingw810_32/bin/mingw32-make.exe -j8
,小伙伴们根据自己的需求调整,然后在CLion
配置命令行构建,配置如下图:
在设置环境变量的时候注意,目前版本CLion
对于windows
的支持不太好,如果你的版本也是通过export
来设置环境变量的,你可以添加插件,也可以使用别名等来解决这个问题,我们这里选择直接通过分号来忽略export
进行环境变量的设置:; $env:Path=aa;bb;cc;
CMake构建
转换为CMake后,一般构建CMakeLists.txt
如下
# Project
cmake_minimum_required(VERSION 3.27)
project(camera-auth-pro VERSION 1.0 LANGUAGES C CXX)
# Config
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
#set(CMAKE_AUTOUIC ON)
set(CMAKE_PREFIX_PATH "C:/Qt/5.15.2/mingw81_32")
# Includes
include_directories(camera-auth-pro PRIVATE
3rdparty/arctern
3rdparty/opencv/include
3rdparty/qBreakpad/include
3rdparty/rkmedia
)
# Lib
find_package(Qt5 COMPONENTS
Core
Gui
Sql
Widgets
Multimedia
MultimediaWidgets
Network
REQUIRED)
link_directories(camera-auth-pro PRIVATE
3rdparty/qBreakpad/lib/windows
)
# Define
add_definitions( -DRKAIQ )
# Sources
add_executable(camera-auth-pro main.cpp resouces.qrc
camera/camera.cpp camera/camera.h
camera/camera_core.cpp camera/camera_core.h
camera/camera_rk.cpp camera/camera_rk.h
camera/sample_common.cpp camera/sample_common.h
constant/base.cpp constant/base.h
constant/enums.h
index.cpp index.h
main.cpp
nfc/nfc_tool.cpp nfc/nfc_tool.h
nfc/serial_reader.h
nfc/uart_port.h
page/auth_table.cpp page/auth_table.h
page/black.cpp page/black.h
page/component/camera_frame.cpp page/component/camera_frame.h
page/component/header.cpp page/component/header.h
page/component/title.cpp page/component/title.h
page/component/wait_auth.cpp page/component/wait_auth.h
page/component/wait_net.cpp page/component/wait_net.h
page/component/wait_server.cpp page/component/wait_server.h
page/face_auth.cpp page/face_auth.h
page/home.cpp page/home.h
page/log_view.cpp page/log_view.h
page/manager_setting.cpp page/manager_setting.h
page/manager_setting_login.cpp page/manager_setting_login.h
page/no_net.cpp page/no_net.h
page/no_server.cpp page/no_server.h
service/api.cpp service/api.h
service/api_zf.cpp service/api_zf.h
service/base_config.cpp service/base_config.h
service/card_recognition.cpp service/card_recognition.h
service/face_recognition.cpp service/face_recognition.h
service/local_database.cpp service/local_database.h
service/log_record.cpp service/log_record.h
service/schedule.cpp service/schedule.h
utils/ui_util.cpp utils/ui_util.h
)
target_link_libraries(camera-auth-pro PRIVATE
Qt::Core
Qt::Gui
Qt::Multimedia
Qt::MultimediaWidgets
Qt::Network
Qt::Sql
Qt::Widgets
qBreakpad
)
并且在Settings
->Build, Execution, Deployment
->Toolchains
中配置正确的工具链:
即可让CLion
完成正常编译工作,同时也可以在下方的CMake
配置中选择自定义构建选项以及环境变量等,比如将Build directory
修改为..\target
防止构建文件对于版本管理的干扰等等
快捷键
如果你需要完全的QtCreator
快捷键,那么可以在Settings
->Keymap
中调整。如果你只是希望修改部分按键,主要习惯更依赖IDEA
。那么可以先切换到QtCreator
键盘映射,检索所需快捷键,比如我们习惯于使用F4
切换头文件和源文件,在改为QtCreator
后,检索F4
,查看到该快捷键名称为SwitchHeaderSource
即可切回Windows
更改该快捷键的键位
修改文件创建模板
对于一般C++
项目的新文件创建,我们可以使用两种CLion
提供的默认模板,在Setting
->Editor
->File and Code Templates
中可以查到,分别是Qt Class
和C++ Class
。但是如果我们需要使用创建Qt
类两种都不好用,Qt Class
会默认携带ui
这对于我们纯手写界面工作的并不友好,而C++ Class
创建的模板东西太少,所以小伙伴们如果有需要应当是自己重新手写一个比较方便,模板的格式和Jetbrains
的其他产品一样:
这里给出参考:
//.cpp
#[[#include]]# "${SYSTEM_FILENAME}.h"
${NAME}::${NAME}(QWidget *parent) : ${PARENT_CLASS}(parent) {
}
${NAME}::~${NAME}() {
}
//.h
#[[#ifndef]]# ${INCLUDE_GUARD}
#[[#define]]# ${INCLUDE_GUARD}
#[[#include]]# <${PARENT_CLASS}>
class ${NAME} : public ${PARENT_CLASS} {
Q_OBJECT
public:
explicit ${NAME}(QWidget *parent = nullptr);
~${NAME}() override;
};
#[[#endif]]# //${INCLUDE_GUARD}
我们需要利用子模板来达到创建两个的目的,然后在创建的时候选择自己的模板即可成功创建头文件和源文件