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

wxWidgets(1):在Ubuntu 环境中搭建wxWidgets 库环境,安装库和CodeBlocks的IDE,可以运行demo界面了,继续学习中

1,选择使用 wxWidgets 框架

选择这个主要是因为完全的开源,不想折腾 Qt的库,而且打包的文件比较大。

网络上面有很多的对比,而且使用QT的人比较多。
但是我觉得wxwidgets 更加偏向 c++ 语法本身,也有助学习C++。
没有太多的特殊封装,而且商业化更加友好,打包软件也比较少。

更偏向原生的系统,做好相关的功能开发。

2,在 ubuntu上进行安装320版本环境

https://www.wxwidgets.org/downloads/

https://docs.codelite.org/wxWidgets/repo320/

先增加证书授权:

# 增加签名
sudo apt-key adv --fetch-keys https://repos.codelite.org/CodeLite.asc#2 安装源
# 生成一个文件 /etc/apt/sources.list.d/archive_uri-https_repos_codelite_org_wx3_2_ubuntu_-jammy.list
# 不需要可以删除掉
sudo apt-add-repository 'deb https://repos.codelite.org/wx3.2/ubuntu/ jammy universe'#3,安装库
apt-get install libwxbase3.2-0-unofficial \libwxbase3.2unofficial-dev \libwxgtk3.2-0-unofficial \libwxgtk3.2unofficial-dev \wx3.2-headers \wx-common \libwxgtk-media3.2-0-unofficial \libwxgtk-media3.2unofficial-dev \libwxgtk-webview3.2-0-unofficial # 特别奇怪,其余的库要一个一个进行安装,不能批量执行。
sudo apt-get install libwxgtk-webview3.2unofficial-dev 
sudo apt-get install libwxgtk-webview3.2-0-unofficial-dbg 
sudo apt-get install libwxbase3.2-0-unofficial-dbg

3,解决编译问题 undefined reference to `pcre2_config_32’|

||=== Build: Debug in demo02 (compiler: GNU GCC Compiler) ===|
||warning: libpcre2-32.so.0, needed by /usr/lib/x86_64-linux-gnu/libwx_baseu_unofficial-3.2.so, not found (try using -rpath or -rpath-link)|
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libwx_baseu_unofficial-3.2.so||undefined reference to `pcre2_config_32'|
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libwx_baseu_unofficial-3.2.so||undefined reference to `pcre2_code_free_32'|
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libwx_baseu_unofficial-3.2.so||undefined reference to `pcre2_get_ovector_pointer_32'|
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libwx_baseu_unofficial-3.2.so||undefined reference to `pcre2_match_data_create_from_pattern_32'|
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libwx_baseu_unofficial-3.2.so||undefined reference to `pcre2_compile_32'|
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libwx_baseu_unofficial-3.2.so||undefined reference to `pcre2_match_data_free_32'|
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libwx_baseu_unofficial-3.2.so||undefined reference to `pcre2_match_32'|
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libwx_baseu_unofficial-3.2.so||undefined reference to `pcre2_get_error_message_32'|
||error: ld returned 1 exit status|
||=== Build failed: 9 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

终于找到问题,通过安装 libpcre2-dev 解决

sudo apt install libpcre2-dev

4,第一个hello world,并进行编译

参考在线手册:
https://docs.wxwidgets.org/3.2/
第一个hello world 文档:
https://docs.wxwidgets.org/3.2/overview_helloworld.html

// wxWidgets "Hello World" Program// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>#ifndef WX_PRECOMP#include <wx/wx.h>
#endifclass MyApp : public wxApp
{
public:virtual bool OnInit();
};class MyFrame : public wxFrame
{
public:MyFrame();private:void OnHello(wxCommandEvent& event);void OnExit(wxCommandEvent& event);void OnAbout(wxCommandEvent& event);
};enum
{ID_Hello = 1
};wxIMPLEMENT_APP(MyApp);bool MyApp::OnInit()
{MyFrame *frame = new MyFrame();frame->Show(true);return true;
}MyFrame::MyFrame(): wxFrame(NULL, wxID_ANY, "Hello World")
{wxMenu *menuFile = new wxMenu;menuFile->Append(ID_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!");Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}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!");
}

进行编译:

c++ -o main main.cpp  `wx-config --cxxflags --libs`

然后运行main
在这里插入图片描述

5,使用工具 codeblocks 进行开发

https://www.codeblocks.org/

在这里插入图片描述
https://www.codeblocks.org/downloads/binaries/

直接通过下载文件安装,或者apt 安装即可。

sudo apt install -y codeblocks

命令就是 codeblocks
在这里插入图片描述
在这里插入图片描述

可以按照模板,创建一个 wxWidgets的项目。

在这里插入图片描述
运行效果:
在这里插入图片描述

6,总结

已经有人总结了项目
https://www.bilibili.com/video/BV1y3411477j/

wxwidgets跨平台GUI框架使用入门详解

PDF资料:

https://pan.baidu.com/s/1cX8Ro

继续学习 wxWidgets。
还有静态编译的办法,需要重新编译wxwidgets,否则没有库文件:
https://blog.csdn.net/CharmingSun/article/details/51765180

相关文章:

wxWidgets(1):在Ubuntu 环境中搭建wxWidgets 库环境,安装库和CodeBlocks的IDE,可以运行demo界面了,继续学习中

1&#xff0c;选择使用 wxWidgets 框架 选择这个主要是因为完全的开源&#xff0c;不想折腾 Qt的库&#xff0c;而且打包的文件比较大。 网络上面有很多的对比&#xff0c;而且使用QT的人比较多。 但是我觉得wxwidgets 更加偏向 c 语法本身&#xff0c;也有助学习C。 没有太多…...

[VIM]VIM初步学习-3

3-1 编写 vim 配置&#xff0c;我的 vim 我做主_哔哩哔哩_bilibili...

RocketMQ Dashboard说解

RocketMQ Dashboard 是 RocketMQ 的管控利器&#xff0c;为用户提供客户端和应用程序的各种事件、性能的统计信息&#xff0c;支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 介绍​ 功能概览​ 面板功能运维修改nameserver 地址; 选用 VIPChannel驾驶舱查看 …...

【RabbitMQ实战】05 RabbitMQ后台管理

一、多租户与权限 1.1 vhost的概念 每一个 RabbitMQ服务器都能创建虚拟的消息服务器&#xff0c;我们称之为虚拟主机(virtual host),简称为 vhost。每一个 vhost本质上是一个独立的小型RabbitMQ服务器&#xff0c;拥有自己独立的队列、交换器及绑定关系等&#xff0c;并且它拥…...

PHP8中final关键字的应用-PHP8知识详解

在PHP8中&#xff0c;final的中文含义是最终的、最后的意思。被final修饰过的类和方法就是“最终的版本”。 如果关键字final放在类的前面&#xff0c;则表示该类不能被继承。 如果关键字final放在方法的前面&#xff0c;则表示该 方法不能被重新定义。 如果有一个类的格式为…...

基于Java的校园失物招领平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...

〔024〕Stable Diffusion 之 模型训练 篇

✨ 目录 🎈 训练集准备🎈 训练集预处理🎈 数据清洗🎈 下载训练源码🎈 训练文件配置🎈 脚本运行🎈 实战测试🎈 训练集准备 声明: 该文中所涉及到的女神图片均来自于网络,仅用作技术教程演示,图片已码一般同一个训练集需要准备 20~40 张不同角度的照片,当然可…...

【MySQL入门到精通-黑马程序员】MySQL基础篇-DML

文章目录 前言一、DML-介绍二、DML-添加数据三、DML-修改数据四、DML-删除数据总结 前言 本专栏文章为观看黑马程序员《MySQL入门到精通》所做笔记&#xff0c;课程地址在这。如有侵权&#xff0c;立即删除。 一、DML-介绍 DML&#xff08;Data Manipulation Language&#xf…...

【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(LDxLDxR)?

将内存中的数据搬到 NEON 寄存器,有很多指令可以完成,熟悉这些指令是必须的。 1 LD1 (multiple structures) 将多个单元素结构加载到一个,两个,三个或四个寄存器上。该指令从内存中加载多个单元结构,并将结果写入一、二、三或四个 SIMD&FP 寄存器。 无偏移 一个寄存…...

华为云云耀云服务器L实例评测 | 实例场景体验之搭建个人博客:通过华为云云耀云服务器构建个人博客

华为云云耀云服务器L实例评测 &#xff5c; 实例场景体验之搭建个人博客&#xff1a;通过华为云云耀云服务器构建个人博客 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀…...

问题记录 springboot 事务方法中使用this调用其它方法

原因: 因为代理对象中调用了原始对象的toString()方法,所以两个不同的对象打印出的引用是相同的...

【Spring Cloud】Ribbon 实现负载均衡的原理,策略以及饥饿加载

文章目录 前言一、什么是 Ribbon二、Ribbon 实现负载均衡的原理2.1 负载均衡的流程2.2 Ribbon 实现负载均衡的源码剖析 三、Ribbon 负载均衡策略3.1 负载均衡策略3.2 演示 Ribbon 负载均衡策略的更改 四、Ribbon 的饥饿加载4.1查看 Ribbon 的懒加载4.2 Ribbon 的饥饿加载模式 前…...

Linux下基本指令(上)

文章内容&#xff1a; 1. ls 指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 单个ls显示当前目录下的文件和目录 常用选项&#…...

C++ 并发编程实战 第十一章 多线程应用的测试和除错

目录 11.1 与并发相关的错误类型 11.1.1 不必要的阻塞 11.1.2 条件竞争 11.2 定位并发错误的技术 11.2.1 代码审阅——发现潜在的错误 11.2.2 通过测试定位并发相关的错误 11.2.3 可测试性设计 11.2.4 多线程测试技术 11.2.5 构建多线程测试代码 11.2.6 测试多线程代…...

Redis实现API访问频率限制

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

BGP服务器租用价格表_腾讯云PK阿里云

BGP云服务器像阿里云和腾讯云均是BGP多线网络&#xff0c;速度更快延迟更低&#xff0c;阿里云BGP服务器2核2G3M带宽优惠价格108元一年起&#xff0c;腾讯云BGP服务器2核2G3M带宽95元一年起&#xff0c;阿腾云分享更多云服务器配置如2核4G、4核8G、8核16G等配置价格表如下&…...

时序分解 | Matlab实现SSA-VMD麻雀算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现SSA-VMD麻雀算法优化变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现SSA-VMD麻雀算法优化变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SSA-VMD麻雀搜索算法SSA优化VMD变分模态分解 可直接运行 分解效果好…...

【CSS如何实现双飞翼布局】

双飞翼布局是一种基于浮动布局的设计模式&#xff0c;主要用于实现三栏布局。它的主要特点是左右两列是浮动的&#xff0c;中间一列使用margin负值来达到“自适应”的效果。这种布局模式可以避免使用嵌套的div&#xff0c;同时也可以保证页面的语义结构清晰。以下是实现双飞翼布…...

服务注册发现机制

二、注册中心选型 1. zk和eureka的区别 zk&#xff1a;CP设计(强一致性)&#xff0c;目标是一个分布式的协调系统&#xff0c;用于进行资源的统一管理。 当主节点crash后&#xff0c;需要进行leader的选举&#xff0c;在这个期间内&#xff0c;zk服务是不可用的&#xff08;当然…...

【postgresql 基础入门】多表联合查询 join与union 并,交,差等集合操作,两者的区别之处

多表数据联合查询 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#x…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...