当前位置: 首页 > article >正文

用Ai学习wxWidgets笔记——在 VS Code 中使用 CMake 搭建 wxWidgets 开发工程

声明:本文整理筛选Ai工具生成的内容辅助写作,仅供参考

>> 在 VS Code 中使用 CMake 搭建 wxWidgets 开发工程

下面是一步步指导如何在 VS Code 中配置 wxWidgets 开发环境,包括跨平台设置(Windows 和 Linux)。

1. 准备工作

安装必要组件

  • 安装 VS Code
  • 安装 CMake 扩展(ms-vscode.cmake-tools)
  • 安装 C++ 扩展(ms-vscode.cpptools)
  • 安装 CMake(建议 3.10 或更高版本)

安装 wxWidgets

Windows:

# 使用 vcpkg 安装
vcpkg install wxwidgets

Linux (Ubuntu/Debian):

sudo apt-get install libwxgtk3.0-gtk3-dev

Ai生成不完整,安装方式有很多,这里推荐两篇关于 Linux 下的 wxWidgets 安装的文章:
1)wxWidgets 在 Linux 下开发环境配置 - Anonymous596 - 博客园
2)https://blog.csdn.net/weixin_44211462/article/details/145368027 - link

2. 创建项目结构

my_wx_project/
├── .vscode/
│   ├── settings.json
│   └── cmake-kits.json (可选)
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   └── MyFrame.h
│   └── MyFrame.cpp
└── resources/└── app.rc (Windows)

3. 配置 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(MyWxApp)# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 查找wxWidgets包
find_package(wxWidgets REQUIRED COMPONENTS core base adv)# 包含wxWidgets设置
include(${wxWidgets_USE_FILE})# 添加可执行文件
add_executable(${PROJECT_NAME}src/main.cppsrc/MyFrame.cppsrc/MyFrame.h
)# Windows特定设置
if(WIN32)# 添加资源文件if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/resources/app.rc")target_sources(${PROJECT_NAME} PRIVATE "resources/app.rc")endif()# 设置为Windows应用程序(不显示控制台)set_target_properties(${PROJECT_NAME} PROPERTIESWIN32_EXECUTABLE TRUE)
endif()# 链接wxWidgets库
target_link_libraries(${PROJECT_NAME} PRIVATE ${wxWidgets_LIBRARIES})# 包含目录
target_include_directories(${PROJECT_NAME} PRIVATE${wxWidgets_INCLUDE_DIRS}${CMAKE_CURRENT_SOURCE_DIR}/src
)# 安装目标
install(TARGETS ${PROJECT_NAME} DESTINATION bin)

4. 配置 VS Code

.vscode/settings.json

{"cmake.configureSettings": {// Windows下使用vcpkg的wxWidgets"CMAKE_TOOLCHAIN_FILE": "C:/vcpkg/scripts/buildsystems/vcpkg.cmake",// Linux下通常不需要特殊设置// 如果需要特定版本可以设置路径// "wxWidgets_ROOT_DIR": "/usr/local/wxWidgets-3.1.5"},"cmake.buildDirectory": "${workspaceFolder}/build","C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
}

.vscode/cmake-kits.json (可选)

[{"name": "GCC","compilers": {"C": "/usr/bin/gcc","CXX": "/usr/bin/g++"}},{"name": "Windows MSVC","visualStudio": "VisualStudio.16.2019","visualStudioArchitecture": "x64"}
]

5. 示例代码

src/MyFrame.h

#ifndef MY_FRAME_H
#define MY_FRAME_H#include <wx/wx.h>class MyFrame : public wxFrame {
public:MyFrame(const wxString& title);private:void OnHello(wxCommandEvent& event);void OnExit(wxCommandEvent& event);void OnAbout(wxCommandEvent& event);wxDECLARE_EVENT_TABLE();
};#endif

src/MyFrame.cpp

#include "MyFrame.h"wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)EVT_MENU(wxID_HELLO, MyFrame::OnHello)EVT_MENU(wxID_EXIT, MyFrame::OnExit)EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
wxEND_EVENT_TABLE()MyFrame::MyFrame(const wxString& title): wxFrame(nullptr, wxID_ANY, title)
{wxMenu *menuFile = new wxMenu;menuFile->Append(wxID_HELLO, "&Hello...\tCtrl-H","Help string shown in status bar for this menu item");menuFile->AppendSeparator();menuFile->Append(wxID_EXIT);wxMenu *menuHelp = new wxMenu;menuHelp->Append(wxID_ABOUT);wxMenuBar *menuBar = new wxMenuBar;menuBar->Append(menuFile, "&File");menuBar->Append(menuHelp, "&Help");SetMenuBar(menuBar);CreateStatusBar();SetStatusText("Welcome to wxWidgets!");
}void MyFrame::OnExit(wxCommandEvent& event)
{Close(true);
}void MyFrame::OnAbout(wxCommandEvent& event)
{wxMessageBox("This is a wxWidgets Hello World example","About Hello World", wxOK | wxICON_INFORMATION);
}void MyFrame::OnHello(wxCommandEvent& event)
{wxLogMessage("Hello world from wxWidgets!");
}

src/main.cpp

#include "MyFrame.h"class MyApp : public wxApp {
public:virtual bool OnInit() {MyFrame *frame = new MyFrame("Hello World");frame->Show(true);return true;}
};wxIMPLEMENT_APP(MyApp);

6. Windows 资源文件 (resources/app.rc)

#include "wx/msw/wx.rc"MyAppIcon ICON "app.ico"

7. 构建和运行

  1. 在 VS Code 中打开项目文件夹
  2. Ctrl+Shift+P 并选择 CMake: Configure
  3. 选择工具链(Windows 上选择 MSVC,Linux 上选择 GCC)
  4. Ctrl+Shift+P 并选择 CMake: Build
  5. F5 调试运行

8. 调试配置

.vscode/launch.json 中添加:

{"version": "0.2.0","configurations": [{"name": "(gdb) Launch","type": "cppdbg","request": "launch","program": "${workspaceFolder}/build/MyWxApp","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]},{"name": "(Windows) Launch","type": "cppvsdbg","request": "launch","program": "${workspaceFolder}/build/Debug/MyWxApp.exe","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"console": "externalTerminal"}]
}

9. 常见问题解决

问题1: CMake 找不到 wxWidgets

  • 解决方案:确保正确设置了 wxWidgets_ROOT_DIR 或使用 vcpkg

问题2: 链接错误

  • 解决方案:检查 find_package 中是否包含了所有需要的组件

问题3: Windows 上显示控制台窗口

  • 解决方案:确保设置了 WIN32_EXECUTABLE TRUE

问题4: Linux 上外观不正确

  • 解决方案:确保安装了正确的 GTK 主题,并在 CMake 中指定 --toolkit=gtk3

通过以上步骤,你应该能够在 VS Code 中成功配置 wxWidgets 开发环境,并开始跨平台 GUI 应用程序的开发。

相关文章:

用Ai学习wxWidgets笔记——在 VS Code 中使用 CMake 搭建 wxWidgets 开发工程

声明&#xff1a;本文整理筛选Ai工具生成的内容辅助写作&#xff0c;仅供参考 >> 在 VS Code 中使用 CMake 搭建 wxWidgets 开发工程 下面是一步步指导如何在 VS Code 中配置 wxWidgets 开发环境&#xff0c;包括跨平台设置&#xff08;Windows 和 Linux&#xff09;。…...

【深度学习新浪潮】如何入门三维重建?

入门三维重建算法技术需要结合数学基础、计算机视觉理论、编程实践和项目经验,以下是系统的学习路径和建议: 一、基础知识储备 1. 数学基础 线性代数:矩阵运算、向量空间、特征分解(用于相机矩阵、变换矩阵推导)。几何基础:三维几何(点、线、面的表示)、射影几何(单…...

Android实现点击Notification通知栏,跳转指定activity页面

效果 1、点击通知栏通知&#xff0c;假如app正在运行&#xff0c;则直接跳转到指定activity显示具体内容&#xff0c;在指定activity中按返回键返回其上一级页面。 2、点击通知栏通知&#xff0c;假如app已经退出&#xff0c;先从SplashActivity进入&#xff0c;显示app启动界…...

Codeforces Round 1025 (Div. 2) B. Slice to Survive

Codeforces Round 1025 (Div. 2) B. Slice to Survive 题目 Duelists Mouf and Fouad enter the arena, which is an n m n \times m nm grid! Fouad’s monster starts at cell ( a , b ) (a, b) (a,b), where rows are numbered 1 1 1 to n n n and columns 1 1 1 t…...

ubuntu中使用docker

上一篇我已经下载了一个ubuntu:20.04的镜像&#xff1b; 1. 查看所有镜像 sudo docker images 2. 基于本地存在的ubuntu:20.04镜像创建一个容器&#xff0c;容器的名为cppubuntu-1。创建的时候就会启动容器。 sudo docker run -itd --name cppubuntu-1 ubuntu:20.04 结果出…...

复制与图片文件同名的标签文件到目标路径

引言&#xff1a;在数据集构建中&#xff0c;我们经常需要挑选一些特殊类型的图片&#xff08;如&#xff1a;零件中有特殊脏污背景的图片&#xff0c;写论文的时候想单独对这类情况进行热力图验证&#xff09;。我们把挑选出来的图片放到一个文件夹下&#xff0c;这时候我想快…...

【深度学习-Day 24】过拟合与欠拟合:深入解析模型泛化能力的核心挑战

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

[ElasticSearch] DSL查询

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

iview中的table组件点击一行中的任意一点选中本行

<Table border ref"selection" size"small" on-row-click"onClickRow"></Table>// table组件点击一行任意位置选中onClickRow(row, index) {this.$refs.selection.toggleSelect(index)}写上toggleSelect(index)方法即可&#xff0c;…...

《探秘跨网段局域网IP广播:解锁网络通信的新姿势》

一、从基础出发:广播与跨网段 在计算机网络的世界中,广播域是一个至关重要的概念。简单来说,广播域是指网络中能接收任一台主机发出的广播帧的所有主机集合。当一台主机在广播域内发出一个广播帧时,同一广播域内的所有其他主机都可以收到该广播帧。在没有路由器或 VLAN 分割…...

Kafka 单机部署启动教程(适用于 Spark + Hadoop 环境)

&#x1f9ed; Kafka 单机部署启动教程&#xff08;适用于 Spark Hadoop 环境&#xff09; &#x1f4e6; 一、Kafka 版本选择 推荐使用 Kafka 2.13-2.8.1&#xff08;Scala 2.13&#xff0c;稳定适配 Spark 3.1.2 和 Hadoop 3.1.1&#xff09; 下载地址&#xff08;Apache 官…...

maven微服务${revision}依赖打包无法识别

1、场景描述 我现在又一个微服务项目&#xff0c;父pom的版本&#xff0c;使用<properties>定义好&#xff0c;如下所示&#xff1a; <name>ypsx-finance-center</name> <artifactId>ypsx-finance</artifactId> <packaging>pom</pack…...

2025年06月07日Github流行趋势

项目名称&#xff1a;netbird 项目地址url&#xff1a;https://github.com/netbirdio/netbird项目语言&#xff1a;Go历史star数&#xff1a;14824今日star数&#xff1a;320项目维护者&#xff1a;mlsmaycon, braginini, pascal-fischer, lixmal, pappz项目简介&#xff1a;使…...

WPS中将在线链接转为图片

WPS中将在线链接转为图片 文章目录 WPS中将在线链接转为图片一&#xff1a;解决方案1、下载图片&#xff0c;精确匹配&#xff08;会员功能&#xff09;2、将在线链接直接转为图片 一&#xff1a;解决方案 1、下载图片&#xff0c;精确匹配&#xff08;会员功能&#xff09; …...

实战二:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

二元函数可微 切平面逼近 线性函数逼近

二元函数 f ( x , y ) f(x, y) f(x,y) 在某点可微 的含义&#xff0c;可以从几何直观、严格数学定义、与一阶偏导数的关系三个层面来理解&#xff1a; &#x1f539;1. 几何直观上的含义&#xff08;最易理解&#xff09; 二元函数 f ( x , y ) f(x, y) f(x,y) 在点 ( x 0 …...

vue生成二维码图片+文字说明

需求&#xff1a;点击下载图片&#xff0c;上方是二维码&#xff0c;下方显示该二维码的相关内容&#xff0c;并且居中显示&#xff0c;支持换行 解决方案步骤&#xff1a; 1. 使用qrcode生成二维码的DataURL。 2. 创建canvas&#xff0c;将二维码图片绘制到canvas的上半部分…...

机器学习监督学习实战五:六种算法对声呐回波信号进行分类

本项目基于UCI的声呐目标识别数据集&#xff08;Sonar, Mines vs. Rocks&#xff09;&#xff0c;通过10种机器学习算法比较&#xff0c;发现集成学习方法表现最优。研究首先对60个声呐能量特征进行可视化分析&#xff08;分布直方图、相关性矩阵&#xff09;&#xff0c;对比了…...

​React Hooks 的闭包陷阱问题

这是主包在面试中遇到的一道题目&#xff0c;面试官的问题是&#xff1a;"这个页面初次展示出来时Count和step的值是什么&#xff0c;我点击按钮count和step的值有什么变化&#xff1f;“ 这个题目主包回答的不好&#xff0c;所以想做一个总结。 题目 import React, { …...

力扣面试150题--克隆图

Day 61 题目描述 思路 /* // Definition for a Node. class Node {public int val;public List<Node> neighbors;public Node() {val 0;neighbors new ArrayList<Node>();}public Node(int _val) {val _val;neighbors new ArrayList<Node>();}public N…...

【HarmonyOS 5】运动健康开发实践介绍以及详细案例

以下是 HarmonyOS 5 运动健康功能的简洁介绍&#xff0c;聚焦核心体验与技术亮点&#xff1a; 一、AI 驱动的全场景健康管理 ‌智能运动私教‌&#xff1a;运动前推送热身指导&#xff0c;运动中实时纠正动作&#xff0c;运动后生成个性化报告与改进建议。AI 融合用户多设备数…...

STM32开发中,线程启动异常问题排查简述

1. 参数传递问题 错误类型&#xff1a;线程属性错误地使用。影响&#xff1a;线程属性&#xff08;如堆栈大小、优先级&#xff09;不匹配可能导致线程创建失败或行为异常。验证方法&#xff1a;检查 线程创建的返回值&#xff0c;若为 NULL 则表示线程创建失败。 2. 系统资源…...

SQL进阶之旅 Day 18:数据分区与查询性能

【SQL进阶之旅 Day 18】数据分区与查询性能 文章简述 在现代数据库系统中&#xff0c;随着数据量的快速增长&#xff0c;如何高效地管理和查询大规模数据成为开发人员和数据分析师面临的重要挑战。本文深入探讨了数据分区的概念及其对查询性能的提升作用&#xff0c;结合理论…...

鸿蒙PC,有什么缺点?

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 价格太高&#xff0c;二是部分管理员权限首先&#xff0c;三对于开发者不太友好举个例子&#xff1a;VSCode的兼容性对程序员至关重要。若能支持VSCode&#xff0c;这台电脑将成为大多数开发者…...

前端工具:Webpack、Babel、Git与工程化流程

1. Webpack&#xff1a;资源打包优化工具 案例1&#xff1a;多入口文件打包 假设项目有多个页面&#xff08;如首页index.js和登录页login.js&#xff09;&#xff0c;需要分别打包&#xff1a; ● 配置webpack.config.js&#xff1a; module.exports {entry: {index: ./sr…...

使用Python和Scikit-Learn实现机器学习模型调优

在机器学习项目中&#xff0c;模型的性能往往取决于多个因素&#xff0c;其中模型的超参数&#xff08;hyperparameters&#xff09;起着关键作用。超参数是模型在训练之前需要设置的参数&#xff0c;例如决策树的深度、KNN的邻居数等。合理地选择超参数可以显著提升模型的性能…...

灰狼优化算法MATLAB实现,包含种群初始化和29种基准函数测试

灰狼优化算法&#xff08;Grey Wolf Optimizer, GWO&#xff09;MATLAB实现&#xff0c;包含种群初始化和29种基准函数测试。代码包含详细注释和可视化模块&#xff1a; %% 灰狼优化算法主程序 (GWO.m) function GWO()clear; clc; close all;% 参数设置SearchAgents_no 30; …...

go语言学习 第7章:数组

第7章&#xff1a;数组 数组是一种基本的数据结构&#xff0c;用于存储相同类型的元素集合。在Go语言中&#xff0c;数组的大小是固定的&#xff0c;一旦定义&#xff0c;其长度不可改变。本章将详细介绍Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。 一、数组…...

PDF图片和表格等信息提取开源项目

文章目录 综合性工具专门的表格提取工具经典工具 综合性工具 PDF-Extract-Kit - opendatalab开发的综合工具包&#xff0c;包含布局检测、公式检测、公式识别和OCR功能 仓库&#xff1a;opendatalab/PDF-Extract-Kit特点&#xff1a;功能全面&#xff0c;包含表格内容提取的S…...

《Progressive Transformers for End-to-End Sign Language Production》复现报告

摘要 本文复现了《Progressive Transformers for End-to-End Sign Language Production》一文中的核心模型结构。该论文提出了一种端到端的手语生成方法&#xff0c;能够将自然语言文本映射为连续的 3D 骨架序列&#xff0c;并引入 Counter Decoding 实现动态序列长度控制。我…...