在Linux下使用wxWidgets进行跨平台GUI开发
在Linux下使用wxWidgets进行跨平台GUI开发
wxWidgets是一个功能强大的跨平台C++ GUI框架,支持Windows、Linux和macOS等多种平台。本文将详细介绍在Linux系统(以Ubuntu为例)上安装、配置和使用wxWidgets的完整过程,包括从源码编译、CMake工程配置到VS Code开发环境搭建的全套指南。
安装wxWidgets开发环境
1. 配置GTK+开发环境
首先需要安装GTK+开发库和相关依赖:
sudo apt-get update
sudo apt-get install libgtk-3-dev
sudo apt install libpcre2-dev
2. 获取并解压wxWidgets源码
从wxWidgets官方网站下载最新源码包(以3.2.4为例):
tar xzf wxWidgets-3.2.4.tar.gz
注意:如果解压后发现3rdparty和src/expat目录为空,需要从wxWidgets GitHub仓库下载补充这些文件。
3. 编译安装wxWidgets
进入解压目录并创建构建目录:
cd wxWidgets-3.2.4
mkdir build-gtk
cd build-gtk
配置编译选项(这里选择静态链接和Unicode支持):
../configure --with-gtk --disable-shared --enable-unicode
开始编译和安装:
make
sudo make install
sudo ldconfig # 更新动态链接库缓存
4. 验证安装
检查安装是否成功:
wx-config --version # 应输出3.2.4
wx-config --cxxflags --libs # 查看编译器标志和链接库
新建一个wxWidgets应用示例
创建一个简单的main.cpp测试文件:
#include <wx/wx.h>
class MyApp : public wxApp {
public:
virtual bool OnInit() {
wxFrame *frame = new wxFrame(NULL, wxID_ANY, "Hello World");
frame->Show(true);
return true;
}
};
wxIMPLEMENT_APP(MyApp);
使用命令行编译运行:
g++ main.cpp `wx-config --cxxflags --libs` -o main
./main
成功运行后将显示一个简单的GUI窗口。

使用CMake构建wxWidgets工程
为了更规范地管理项目,我们使用CMake来构建工程。创建CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.10)
project(hello)
find_package(wxWidgets REQUIRED COMPONENTS core base)
include(${wxWidgets_USE_FILE})
add_executable(hello main.cpp)
target_link_libraries(hello ${wxWidgets_LIBRARIES})
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
构建并运行:
mkdir build
cd build
cmake .. && make
../hello

简单说明上述CMakeLists.txt文件,指定工程项目的名称为hello,使用find_package命令查找并导入了所使用的wxWidgets库(显式指定了一个GUI程序所必须的core和base组件),然后包含wxWidgets设置引用这个外部库,创建可执行文件hello并链接wxWidgets库,最后指定工程目录(test目录)为输出路径。
在VS Code中搭建开发环境
1. 安装必要扩展
- C/C++扩展 (ms-vscode.cpptools)
- CMake Tools扩展 (ms-vscode.cmake-tools)
2. 配置VS Code设置
创建.vscode/settings.json:
{
"cmake.configureSettings": {},
"cmake.buildDirectory": "${workspaceFolder}/build",
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
}
3. 配置调试环境
创建.vscode/launch.json调试配置文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/hello",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
4. 使用VS Code构建和调试
- 按
Ctrl+Shift+P选择CMake: Select a Kit(选择GCC工具链) - 选择
CMake: Configure配置项目 - 选择
CMake: Build构建项目 - 按
F5启动调试
也可以使用侧边栏CMake图标等进行更直观的图形化操作。
5. 跨平台开发注意事项
- 路径处理:始终使用正斜杠
/作为路径分隔符 - 平台特定代码:使用预定义宏如
__WXGTK__和__WXMSW__处理平台差异 - 资源文件:Windows需要
.rc资源文件,Linux通常不需要 - 外观差异:不同平台下控件外观可能不同,应测试各平台表现
通过以上步骤,你已经成功在Linux系统上搭建了完整的wxWidgets开发环境,可以使用CMake和VS Code进行高效的跨平台GUI应用程序开发。
在Linux下使用wxWidgets进行跨平台GUI开发的更多相关文章
- Linux下C ,C ++, Qt开发环境
目录 Linux发行版的选择 安装常用的开发工具(这里针对C/C++/Qt) 安装openGL 中文输入法 安装sublime text 安装vscode apt-get常用命令 Qt环境 Qt常见问 ...
- 《使用wxWidgets进行跨平台程序开发》chap09——布局一个对话框
///////////////////////////////////////////////////////////////////////////// // Name: personalrecor ...
- Linux下串口与工业协议的开发
1.串口通信原理 串口通信定义 串口通信:数据的串行传送方式.串口通信可分为同步通信与异步通信. 同步通信:按照软件识别同步字符来实现数据的发送和接收. 将许多字符组成一个信息组进行发送 要求发送时钟 ...
- 《使用wxWidgets进行跨平台程序开发》chap02——一个简单的应用程序
// Name: minimal.cpp // Purpose: Minimal wxWidgets sample // Author: Julian Smart #include "wx/ ...
- Ubuntu 14.04 下使用微软的跨平台轻量级开发神器 Visual Studio Code
因为 Visual Studio Code 不断更新,官方最新 v1.32 的 .deb 包已经不能用于 Ubuntu 14.04 直接安装了. 下载 v1.31 的 deb 包安装即可:https: ...
- Linux下移植pjsip,使用QT开发
1.移植pjsip env:fedora14 arm-linuc-gcc:gcc version 4.5.1 (ctng-1.8.1-FA) #./configure \ CC=arm-linux-g ...
- linux 下 ifcfg-eth0 配置/CentOS_minimal安装和开发环境部署
CentOS_minimal安装和开发环境部署:http://www.th7.cn/system/lin/201305/39002.shtml 网络接口配置文件 [root@localhost ~]# ...
- linux 下安装 mysql 并配置 python 开发环境
1.安装 mysql ,安装过程中将提示设置 root 用户的密码,默认可以设置为 rootadmin . $ sudo apt-get install mysql-server 2.安装 mysql ...
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...
- C++和C在linux下 和在windows下有什么区别?
一.函数库的区别 linux下的C函数库和windows下的函数库系统调用的机制不一样,Glibc包含了主要的C库.这个库提供了基本例程,用于分配内存.搜索目录.打开关闭文件.读写文件.字串处理.模式 ...
随机推荐
- uniapp 截屏扫码
最近开发功能遇到个需求,用户点击某个操作之后,需要截取当前屏幕内容,并扫码识别屏幕截图中的二维码,代码如下: 首先将代码抽离到外部文件中,以便复用: // 截图 export function tak ...
- GPU的硬件组成及运行原理
GPU的硬件组成 GPU 是一种专门为图形处理而设计的处理器,它的设计目标是在处理大规模.高并发的图形数据时提供高效的计算能力.与 CPU 相比,GPU 的处理器数量更多,每个处理器的计算能力相对较弱 ...
- goland Cannot resolve import 'google/api/annotations.proto'
前言 kratos 项目出现 import 标红,但是 $GOPATH/src/google/api/annotations.proto 已经存在了. 解决 路径:Goland > Settin ...
- 在 Go 中恰到好处的内存对齐
问题 type Part1 struct { a bool b int32 c int8 d int64 e byte } 在开始之前,希望你计算一下 Part1 共占用的大小是多少呢? func m ...
- Golang 入门 : 包名与导入路径
math/rand包有一个Intn函数,可以生成一个随机数,所以我们需要导入math/rand.然后调用rand.Intn生成随机数. 等一下!Intn来自math/rand包,那为什么我们调用包的时 ...
- Git分支命名规范总结
Git分支命名规范总结 在Git分支命名规范中,通常通过前缀明确区分需求(功能开发)和Bug修复,以下是具体规则及示例: 一.命名规范区分原则 需求分支(Feature) 前缀:feature/ 或 ...
- 分布式任务调度系统 xxl-job
微服务难不难,不难!无非就是一个消费方,一个生产方,一个注册中心,然后就是实现一些微服务,其实微服务的难点在于治理,给你一堆 微服务,如何来管理?这就有很多方面了,比如容器化,服务间通信,服务上下线发 ...
- leetcode每日一题:最小化字符串长度
题目 2716. 最小化字符串长度 给你一个下标从 0 开始的字符串 s ,重复执行下述操作 任意 次: 在字符串中选出一个下标 i ,并使 c 为字符串下标 i 处的字符.并在 i 左侧(如果有)和 ...
- python实例:导入会员数据后,读取数据文件,检查导入正确性(整列取excel值、合并列、response取值)
场景描述:某系统新上线,老系统的会员数据要导入新系统中,包含手机号,上级信息和会员余额.有1万多条数据,手工对比过于繁琐,用python自动化处理 思路:系统导入数据后,脚本读取文件,先把会员数据取出 ...
- tp5 分页权限权限设置显示
$adminid = cookie("adminid"); $shop_id=$this->get_shop_id(); if($adminid==1){ $uid = in ...