Vscode + Qt

这篇博客介绍了如何在VSCode中配置Qt应用程序的构建和调试步骤,包括创建Debug目录、运行qmake、执行make以及设置构建任务。同时,针对qDebug无法打印的问题,提供了一种将qDebug信息重定向到日志文件的解决方案,通过自定义消息处理器实现日志记录。

VS Code for Qt Applications - Part 2 - KDAB

.vscode配置

1. tasks.json配置

1.1 配置Debug文件夹的路径

```json

{

"label": "Create build dir",

"type": "shell",

"command": "mkdir -Force path"

},

// path是指定的文件夹,qmake生成的debug文件都存放在这里

```

1.2 配置qmake

```json

        {

          "label": "Run qmake",

          "type": "shell",

          "command": "qmake",

          "args": [

            "../${workspaceRootFolderName}.pro"

          ],

          "options": {

            "cwd": "path"        // 相当于在当前项目的path文件夹下执行qmake,path与1.1一致

          }

        },

```

1.3 配置make

```json

        {

          "label": "Run make",

          "type": "shell",

          "command": "make",                // window系统为mingw32-make,我这里是重命名了

          "args": [

            "-f",

            "Makefile.Debug"

          ],

          "options": {

            "cwd": ".exe"

          }

        },

```

1.4 配置构建命令

```json

          {

            "label": "Build",              

            "dependsOn": [

              "Create build dir",

              "Run qmake",

              "Run make"

            ],

            "dependsOrder": "sequence"

          },

```

2. 配置launch.json

```json

{

    "version": "0.2.0",

    "configurations": [

        {

            "name": "(gdb) Launch",

            "type": "cppdbg",

            "request": "launch",

            "program": "${workspaceFolder}/path/debug/${workspaceRootFolderName}.exe",// 这里的path与1.1设置的path对应

            "args": [],

            "stopAtEntry": false,

            "cwd": "${workspaceFolder}",

            "environment": [],

            "externalConsole": false,

            "MIMode": "gdb",

            "miDebuggerPath": "D:/CTools/Qt/Qt5.9.8/Tools/mingw530_32/bin/gdb.exe",// 这里的gdb要取Qt自带的

            "setupCommands": [

                {

                    "description": "Enable pretty-printing for gdb",

                    "text": "-enable-pretty-printing",

                    "ignoreFailures": true

                }

            ],

            "preLaunchTask": "Build"        ·//先执行tasks中的Build,与1.4对应

        }

    ]

}

```

qDebug()无法打印

.pro文件添加CONFIG += console,没用。。。。。。

用某位大佬的代码,将qDebug信息重定向到日志文件:

```c++

// 在main.cpp中使用setDebugOutput("./debug.log");开启

void setDebugOutput(const QString &rawTargetFilePath_, const bool &argDateFlag_)

{

    static QString rawTargetFilePath;

    static bool argDateFlag;

    rawTargetFilePath = rawTargetFilePath_;

    argDateFlag = argDateFlag_;

    class HelperClass

    {

    public:

        static void messageHandler(QtMsgType type, const QMessageLogContext &, const QString &message_)

        {

            QString message;

            switch ( type )

            {

                case QtDebugMsg:

                {

                    message = message_;

                    break;

                }

                case QtWarningMsg:

                {

                    message.append("Warning: ");

                    message.append(message_);

                    break;

                }

                case QtCriticalMsg:

                {

                    message.append("Critical: ");

                    message.append(message_);

                    break;

                }

                case QtFatalMsg:

                {

                    message.append("Fatal: ");

                    message.append(message_);

                    break;

                }

                default: { break; }

            }

            QString currentTargetFilePath;

            if ( argDateFlag )

            {

                currentTargetFilePath = rawTargetFilePath.arg( ( ( argDateFlag ) ? ( QDateTime::currentDateTime().toString("yyyy_MM_dd") ) : ( "" ) ) );

            }

            else

            {

                currentTargetFilePath = rawTargetFilePath;

            }

            if ( !QFileInfo::exists( currentTargetFilePath ) )

            {

                QDir().mkpath( QFileInfo( currentTargetFilePath ).path() );

            }

            QFile file( currentTargetFilePath );

            file.open( QIODevice::WriteOnly | QIODevice::Append );

            QTextStream textStream( &file );

            textStream << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss" ) << ": " << message << endl;

        }

    };

    qInstallMessageHandler( HelperClass::messageHandler );

}

```

### 配置 VSCode 使用 CMake 构建 Qt 项目的指南 为了在 Visual Studio Code (VSCode) 中使用 CMake 构建 Qt 项目,需完成以下几个方面的设置: #### 安装必要的扩展 确保已安装以下插件以支持 Qt 和 CMake 的开发环境: - **Qt for Visual Studio Code**: 提供对 Qt 开发的支持[^1]。 - **CMake Tools**: 负责管理构建过程并提供与 CMake 的交互功能[^2]。 这些工具能够有效协作,从而实现高效的 Qt 项目开发。 #### 创建 Qt 项目 如果尚未创建 Qt 项目,则可以通过 Qt Creator 或命令行来初始化一个新的基于 CMake 的项目。以下是通过 Qt Creator 进行操作的一个简单方法: 1. 打开 Qt Creator 并选择 `New Project` -> `Application` -> `Qt Widgets Application`。 2. 在构建系统选项中选择 `CMake`。 3. 设置目标套件为适合的桌面版本(例如 Desktop Qt 6.x.x MSVC20xx 64-bit)[^3]。 此步骤会生成一个基础结构化的文件夹以及初始的 CMakeLists.txt 文件。 #### 配置 VSCode 工作区 将上述由 Qt Creator 初始化好的目录作为工作区导入到 VSCode 当中。具体做法如下: - 启动 VSCode; - 利用菜单栏中的 “File” -> “Open Folder...”,选取包含新建立之 Qt/CMake 项目的根路径; 随后,在终端窗口执行下列指令确认环境变量正确无误,并加载所需的编译器和链接信息: ```bash cmake --version qmake --version ``` #### 设定 CMakeTools 套件 启动 CMake Tools 插件后,它会自动探测当前文件系统的状态尝试识别可用的目标平台及其关联属性。如果没有成功检测或者希望手动指定某些参数的话,请按照提示调整配置项,比如定义好 generator 类型、build type 等等。 另外需要注意的是,对于 Windows 用户而言可能还需要额外指明 MinGW 或者 Microsoft Visual C++ Compiler 的确切位置以便顺利完成整个流程。 --- ### 示例代码片段展示基本 CMakeLists.txt 结构 下面给出一段典型的用于描述此类场景下的 CMakeLists.txt 文档内容概览: ```cmake cmake_minimum_required(VERSION 3.15) project(MyQtApp VERSION 1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED) add_executable(${PROJECT_NAME} main.cpp) target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets) ``` 以上脚本明确了最低需求版本号、工程名称设定、标准特性启用状况以及最终可执行程序依赖哪些模块等方面的信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值