CLion配置QT的开发环境

  Qt 开发时 QtCreator 是不得不接触的 IDE,提供了代码编写与可视化设计 GUI 的环境,但有时候使用却有点稍显逊色 。CLion 是 JetBrains 出品的 C++ IDE ,使用 CLion 来编写 C++ 会大大提高效率,因此 CLion 写代码,Qt Designer设计界面的方式是个不错的选择。😛

我的的配置环境

Windows 10

Qt 5.14..0

Mingw 64 bit

CLion 2020.1


安装 CLion 与 Qt

  首先安装好CLion ,可参考前面的这篇文章: CLion的安装、激活、汉化及编译器配置

并安装Qt ,可参见 Visual Studio 2019配置qt开发环境 一文中 Qt安装 小节 安装好 Qt 。安装时可根据自身需求选择 mingw 或者 MSVC 编译器。

Basically, MinGW is a port of Linux (GNU, actually) tools for Windows, which happen to include a port of GCC (the actual compiler). MSVC, on the other hand, is a Windows native tool chain and runtime for building C/C++ executables. – Quora

MinGW 是 Minimalist GNU on Windows 的缩写。它是一个可自由使用和自由发布的 Windows 特定头文件和使用 GNU 工具集导入库的集合,允许你在 GNU/Linux 和 Windows 平台生成本地的 Windows 程序而不需要第三方 C 运行时库。

msvc 版允许和微软的 Visual Studio 进行集成迅速开发复杂的企业级应用。

如果考虑到扩展和跨平台,应该优先考虑 MinGW。


配置环境变量

右键“我的电脑”-》“高级系统设置”-》“环境变量”-》“系统变量”-》Path,添加如下四个新的系统变量:

D:\20200213\ForDevelopment\Qt\Qt5.14.1\Tools\mingw730_64\bin

D:\20200213\ForDevelopment\Qt\Qt5.14.1\Tools\mingw730_64\lib

D:\20200213\ForDevelopment\Qt\Qt5.14.1\5.14.1\mingw73_64\bin

D:\20200213\ForDevelopment\Qt\Qt5.14.1\5.14.1\mingw73_64\lib

根据自己的安装路径配置如上四个系统变量。


CLion 中的配置

CLion 中工具链配置

启动Clion后,左上角是点击“File”-》“settings”-》“Build,Excution,Deployment”-》“Toolchains”,然后将Environment改为“MinGW”,然后,选择Qt安装路径下的MinGw路径。具体如下图:

若你的没有检测出,请根据上图的手动配置相应的 gcc 、g++ 等编译器的路径。注意我的是 64位 MinGW下的路径。

另外,若看到出现对话框中有一个黄色感叹号 ,关于 cmake 错误,请参https://zhuanlan.zhihu.com/p/43680621


CLion中CMake设置

注意:工具链要选择上一步中配置好的。

CMake Options 是用来指定Qt的安装位置,默认会检测到,若没有的话需要手动设置。

1
2
3
CMake Options:
-DCMAKE_PREFIX_PATH=D:/20200213/ForDevelopment/Qt/Qt5.14.1/5.14.1/mingw73_64


配置Qt Designer和UIC 用于打开 Qt 设计师

Qt Designer 配置

  在CLion中,进入菜单File->Settings->Tools->External Tools,点击 + 新建工具。

名称写为 Qt Designer ,描述随便写,desginer.exe 的路径根据自己的安装情况更改。在参数与工作目录中分别写入$FileName$ 和 $FileDir$,见下图配置。

1
2
3
4
Name: Qt Designer
Program: D:\20200213\ForDevelopment\Qt\Qt5.14.1\5.14.1\mingw73_64\bin\designer.exe (改为自己Qt Designer的路径)
Arguments: $FileName$
Working directory: $FileDir$

UIC配置

  与 Qt Designer 配置相似 ,名称、描述、程序路径、参数与工作目录。其中参数与工作目录分别写入 $FileName$ -o ui_$FileNameWithoutExtension$.h 和 $FileDir$ 。

image

1
2
3
4
Name: UIC
Program: D:\20200213\ForDevelopment\Qt\Qt5.14.1\5.14.1\mingw73_64\bin\uic.exe (改为自己uic的路径)
Arguments: $FileName$ -o ui_$FileNameWithoutExtension$.h
Working directory: $FileDir$

  这样以后就可以打开外部的 Qt 设计师编辑我们软件的界面啦。

具体打开方式为: 右键点击ui文件或者qrc文件,然后点击External Tools -> QtDesigner,如能将选中的文件通过Qt Creator打开,则为成功。

image

建立项目进行测试

建立项目

配置好后我们可以打开 CLion 试试了。

创建一个新项目:

然后 Run 一下 ,熟悉的 HelloWorld ,你好世界!

说明 C++ 的是能够运行起来啦,接下来我们加入属于 Qt 的东西 。

在工程上右键-》“new”-》“C++ class”,新建 ``mainwindow.cpp`,如下:

接着继续在工程上右键-》“new”-》“file”,新建mainwindow.ui文件

在 main.cpp 中写入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}


mainwindow.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* File Name: mainwindow.cpp
* Description: 用于详细说明此程序文件完成的主要功能,与其他模块或函数的接口,输出值、取值范围、含义及参数间的控制、顺序、独立或依赖等关系
*
* Author:
* Version: v1.0
* Date: 2020/7/28 17:57
* LastEditTime: 2020/7/28 17:57
* Copyright:
* Project Name: CLionQtTest
* IDE: CLion
* Reference:
* History: 修改历史记录列表, 每条修改记录应包括修改日期、修改者及修改内容简述
*/
//


#include <mainwindow.h>
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

mainwindow.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
};

#endif

mainwindow.ui 可以右键-外部工具-选择UI designer 打开 ,随便加点控件

具体打开方式为: 右键点击ui文件或者qrc文件,然后点击External Tools -> QtDesigner,如能将选中的文件通过Qt Creator打开,则为成功。

mainwindow.ui 中的内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>230</x>
<y>100</y>
<width>351</width>
<height>171</height>
</rect>
</property>
<property name="font">
<font>
<family>方正宋刻本秀楷简体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>你好世界,Qt + CLion </string>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>200</x>
<y>360</y>
<width>281</width>
<height>101</height>
</rect>
</property>
<property name="font">
<font>
<family>思源黑体 CN Light</family>
<pointsize>12</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>热夏的博客
www.lifeee.top</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>


编写CMakeLists.txt

  CLion是根据CMakeLists.txt文件来组织和设置项目的,所以如果我们需要添加诸如Qt这样的第三方库或是改变编译行为,都只要修改CMakeLists.txt即可。

  在完成上面的工作后,我们需要编写 CMakeLists.txt ,注意将 CLionQtTest 改成自己的项目名称。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
cmake_minimum_required(VERSION 3.16)
project(CLionQtTest)

set(CMAKE_CXX_STANDARD 11)


set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)


find_package(Qt5Widgets)
find_package( Qt5Core)
find_package( Qt5Gui)

set(UI_FILES)

set(RC_FILES)

set(QRC_FILES)

add_executable(CLionQtTest
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui

)

target_link_libraries(CLionQtTest Qt5::Widgets)


注意将 CLionQtTest 改成自己的项目名称。

#表示该项目至少要求cmake的版本为3.16

cmake_minimum_required(VERSION 3.16)

#指定c++标准的版本

set(CMAKE_CXX_STANDARD 11)

#自动调用moc,uic,rcc处理qt的扩展部分

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

#项目名称

project(CLionQtTest)

#找到对应的qt模块,名字为qmake中QT += 中的name首字母大写后加上Qt5前缀

例如core为QtCore,也可以去${CMAKE_PREFIX_PATH}的目录中找到正确的模块名

find_package(Qt5Widgets)
find_package( Qt5Core)
find_package( Qt5Gui)

#向项目中添加需要的文件,当然你也可以对ui文件、cpp文件、h文件、qrc文件单独使用SET指令管理,然后添加到add_executable指令中

add_executable(CLionQtTest
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui

)

# 或者 将当前目录的所有源文件添加进变量
aux_source_directory(. DIRS_SRCS)

#将项目中需要添加的Qt Modules中的库文件与项目进行链接(添加的模块即Qt”*.pro”文件中的Qt+=Module)

target_link_libraries(CLionQtTest Qt5::Widgets)


运行

然后运行即可,报错的话可以看下面的一些常见错误。

正常运行


报错

Process finished with exit code -1073741511 (0xC0000139)

方案一:

在Clion中,进入菜单->Run->Edit Configurations,选择自己的Application,填写Working directory为Qt的bin目录,如我的安装目录是:D:\Qt\Qt5.10.0\5.10.0\mingw53_32\bin

然后保存退出即可。

方案二:把Dll拷贝到exe目录

方案一

然后重新运行就正常啦

正常运行

配置工具链 MinGW 路径时报错:

For MinGW make to work correctly sh.exe must NOT be in your path.

解决方法:cmake设置参数 -DCMAKE_SH=”CMAKE_SH-NOTFOUND”

1
-DCMAKE_SH="CMAKE_SH-NOTFOUND"

Clion-如何切换Debug与Release版本

  在设置中找到 Build,Execution,Deployment 中的 CMake 。点击左侧的框,“+”,添加新的模式,系统一般会自动给你产生release版本。

然后进行切换,运行即可。

image



参考文献

CMake manuel in Qt’s documentation.

配置CLion作为Qt5开发环境

Clion 搭建C++环境常见问题

Clion + CMake快速配置Qt开发环境终极版

Win10+Clion+QT5详细配置教程,实测有效!

What is the difference between MinGW and MSVC compilers?

MinGW 与 MSVC 编译的区别




要把所有的夜归还给星河,把所有的春光归还给疏疏篱落,把所有的慵慵沉迷与不前,归还给过去的我。明日之我,胸中有丘壑,立马振山河。

——《德卡先生的信箱》