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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147430.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【算法分析与设计】回溯法(上)

目录 一、学习要点1.1 回溯法1.2 问题的解空间1.3 0-1背包问题的解空间1.4 旅行售货员问题的解空间1.5 生成问题状态的基本方法 二、回溯法的基本思想三、回溯算法的适用条件四、递归回溯五、迭代回溯六、子集树与排列树七、装载问题八、批处理作业调度问题 一、学习要点 理解回…

Kotlin前置检测判断check,require,requireNotNull

Kotlin前置检测判断check&#xff0c;require&#xff0c;requireNotNull &#xff08;1&#xff09;check fun main(args: Array<String>) {val b falsecheck(b) {println("check $b")}println("end") } check监测到值非真时候&#xff0c;抛出一…

【数据结构与算法】通过双向链表和HashMap实现LRU缓存 详解

这个双向链表采用的是有伪头节点和伪尾节点的 与上一篇文章中单链表的实现不同&#xff0c;区别于在实例化这个链表时就初始化了的伪头节点和伪尾节点&#xff0c;并相互指向&#xff0c;在第一次添加节点时&#xff0c;不需要再考虑空指针指向问题了。 /*** 通过链表与HashMa…

Python 无废话-基础知识元组Tuple详讲

“元组 Tuple”是一个有序、不可变的序列集合&#xff0c;元组的元素可以包含任意类型的数据&#xff0c;如整数、浮点数、字符串等&#xff0c;用()表示&#xff0c;如下示例&#xff1a; 元组特征 1) 元组中的各个元素&#xff0c;可以具有不相同的数据类型&#xff0c;如 T…

Python-Flask:编写自动化连接demo脚本:v1.0.0

主函数&#xff1a; # _*_ Coding : UTF-8 _*_ # Time : 13:14 # Author : YYZ # File : Flask # Project : Python_Project_爬虫 import jsonfrom flask import Flask,request,jsonify import sshapi Flask(__name__)# methods: 指定请求方式 接口解析参数host host_info[…

05. 机器学习入门 - 动态规划

文章目录 从一个案例开始动态规划 Hi, 你好。我是茶桁。 咱们之前的课程就给大家讲了什么是人工智能&#xff0c;也说了每个人的定义都不太一样。关于人工智能的不同观点和方法&#xff0c;其实是一个很复杂的领域&#xff0c;我们无法用一个或者两个概念确定什么是人工智能&a…

在visual studio里配置Qt插件并运行Qt工程

Qt插件&#xff0c;也叫qt-vsaddin&#xff0c;它以*.vsix后缀名结尾。从visual studio 2010版本开始&#xff0c;VS支持Qt框架的开发&#xff0c;Qt以插件方式集成到VS里。这里在visual studio 2019里配置Qt 5.14.2插件&#xff0c;并配置Qt环境。 1 下载VS2019 下载VS2019,官…

跟着顶级科研报告IPCC学绘图:温度折线/柱图/条带/双y轴

复现IPCC气候变化过程图 引言 升温条带Warming stripes&#xff08;有时称为气候条带&#xff0c;目前尚无合适且统一的中文释义&#xff09;是数据可视化图形&#xff0c;使用一系列按时间顺序排列的彩色条纹来视觉化描绘长期温度趋势。 在IPCC报告中经常使用这一方案 IPCC是…

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石④

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石④ 第十九章 驱动程序基石④19.7 工作队列19.7.1 内核函数19.7.1.1 定义 work19.7.1.2 使用 work&#xff1a;schedule_work19.7.1.3 其他函数 19.7.2 编程、上机19.7.3 内部机制19.7.3.1 Linux 2.x的工作队列创建过程19.7.3…

BASH shell脚本篇2——条件命令

这篇文章介绍下BASH shell中的条件相关的命令&#xff0c;包括&#xff1a;if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令&#xff0c;请参考&#xff1a;BASH shell脚本篇1——基本命令 1. If语句 if语句用于在顺序执行语句的流程中执行条…

八大排序(三)堆排序,计数排序,归并排序

一、堆排序 什么是堆排序&#xff1a;堆排序&#xff08;Heap Sort&#xff09;就是对直接选择排序的一种改进。此话怎讲呢&#xff1f;直接选择排序在待排序的n个数中进行n-1次比较选出最大或者最小的&#xff0c;但是在选出最大或者最小的数后&#xff0c;并没有对原来的序列…

Python无废话-办公自动化Excel修改数据

如何修改Excel 符合条件的数据&#xff1f;用Python 几行代码搞定。 需求&#xff1a;将销售明细表的产品名称为PG手机、HW手机、HW电脑的零售价格分别修改为4500、5500、7500&#xff0c;并保存Excel文件。如下图 Python 修改Excel 数据&#xff0c;常见步骤&#xff1a; 1&…

docker 基本操作

目录 一、docker 概述 二、容器 2.1容器的特性 2.2namespace的六项隔离 三、docker与虚拟机的区别 四、Docker核心概念 五、docker 基本操作命令 镜像操作 1、搜索镜像 2、获取镜像 3、查看镜像信息 ​编辑 4、查看下载的镜像文件信息 5、查看下载到本地的所有镜…

搭建智能桥梁,Amazon CodeWhisperer助您轻松编程

零&#xff1a;前言 随着时间的推移&#xff0c;人工智能技术以惊人的速度向前发展&#xff0c;正掀起着全新的编程范式革命。不仅仅局限于代码生成&#xff0c;智能编程助手等创新应用也进一步提升了开发效率和代码质量&#xff0c;极大地推动着软件开发领域的快速繁荣。 当前…

SpringCloud(一)Eureka、Nacos、Feign、Gateway

文章目录 概述微服务技术对比 Eureka服务远程调用服务提供者和消费者Eureka注册中心搭建注册中心服务注册服务发现Ribbon负载均衡负载均衡策略饥饿加载 NacosNacos与Eureka对比Nacos服务注册Nacos服务分集群存储NacosRule负载均衡服务实例权重设置环境隔离 Nacos配置管理配置热…

用于自然语言处理的 Python:理解文本数据

一、说明 Python是一种功能强大的编程语言&#xff0c;在自然语言处理&#xff08;NLP&#xff09;领域获得了极大的普及。凭借其丰富的库集&#xff0c;Python 为处理和分析文本数据提供了一个全面的生态系统。在本文中&#xff0c;我们将介绍 Python for NLP 的一些基础知识&…

2023 彩虹全新 SUP 模板,卡卡云模板修复版

2023 彩虹全新 SUP 模板&#xff0c;卡卡云模板&#xff0c;首页美化&#xff0c;登陆页美化&#xff0c;修复了 PC 端购物车页面显示不正常的问题。 使用教程 将这俩个数据库文件导入数据库&#xff1b; 其他的直接导入网站根目录覆盖就好&#xff1b; 若首页显示不正常&a…

计算机网络学习易错点(持续更新~~~)

目录 概述 1.internet和Internet的区别 2.面向连接和无连接 3.不同的T 4.传输速率和传播速率 5.传播时延和传输时延&#xff08;发送时延&#xff09; 6.语法&#xff0c;语义和同步 一.物理层 1.传输媒体与物理层 2.同步通信和异步通信 3.位同步&#xff08;比特同…

nginx多文件组织

背景&#xff1a; nginx的话&#xff0c;有时候&#xff0c;想部署多个配置&#xff0c;比如&#xff1a;使用不同的端口配置不同的web工程。 比如&#xff1a;8081部署&#xff1a;项目1的web页面。 8082部署&#xff1a;项目2的web页面。 1)nginx.conf worker_processes…

Google vs IBM vs Microsoft: 哪个在线数据分析师证书最好

Google vs IBM vs Microsoft: 哪个在线数据分析师证书最好&#xff1f; 对目前市场上前三个数据分析师证书进行审查和比较|Madison Hunter 似乎每个重要的公司都推出了自己版本的同一事物&#xff1a;专业数据分析师认证&#xff0c;旨在使您成为雇主的下一个热门商品。 随着…