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

news2025/1/13 7:34:00

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>
#endif
 
class 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.coloradmin.cn/o/1052912.html

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

相关文章

PHP 二手物品交易网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 二手物品交易网站系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88385559 二、功能介…

容器网络之Flannel

​ 第一个问题位置变化&#xff0c;往往是通过一个称为注册中心的地方统一管理的&#xff0c;这个是应用自己做的。当一个应用启动的时候&#xff0c;将自己所在环境的 IP 地址和端口&#xff0c;注册到注册中心指挥部&#xff0c;这样其他的应用请求它的时候&#xff0c;到指挥…

数据结构与算法基础-(4)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

用数据观测Page Cache

与 Page Cache 有关的场景&#xff1a; 服务器的 load 飙高&#xff1b; 服务器的 I/O 吞吐飙高&#xff1b; 业务响应时延出现大的毛刺&#xff1b; 业务平均访问时延明显增加 上边这些问题&#xff0c;很可能是由于 Page Cache管理不到位引起的&#xff0c;因为 Page Cache 管…

将数据包装成一个图数据结构(torch_geometric)

import torch from torch_geometric.data import Datax torch.tensor([[0, 1], [2, 3], [4, 5]], dtypetorch.float) # 节点特征矩阵&#xff08;三个节点&#xff0c;每个节点两个特征&#xff09; edge_index torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]], dtypetorch.long…

chrome插件-入门

chrome插件的作用 1、屏蔽网页上的广告&#xff0c;提高浏览速度和减少视觉干扰 2、捕捉和编辑网页截图 3、改善在社交媒体平台上的体验&#xff0c;例如提供额外的功能&#xff0c;或自定义外观和布局 4、网页翻译 5、保存和组织网页书签和笔记 6、管理日程安排&#xff0c;设…

第十章 异常

python使用异常的特殊对象管理程序执行期间发生的错误。每当发生错误时&#xff0c;python会创建异常对象。如果编写了处理该异常的代码&#xff0c;程序将继续运行&#xff1b;如果未处理&#xff0c;程序将显示traceback。 异常是使用try-except代码块处理的。使用try-excep…

pytorch3D Windows下安装经验总结

一、说明及准备工作 最近在安装pytorch3D的时候遇到了很多问题&#xff0c;查了很多博客&#xff0c;但发现讲的都不太全&#xff0c;所以特将自己的及收集到的安装过程经验总结如下。我是在Anaconda中虚拟环境下安装的。 1.1准备工作 官方安装教程如下&#xff1a;https://…

CSS基础介绍2

CSS使用三种方式 方式1&#xff1a;在标签的style属性上设置CSS样式&#xff08;行内样式&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>在标签的style属性上设置CSS样式</title>…

第七章 用户和组管理

7.1 Linux中的用户和组的分类 用户类别 超级用户&#xff08;0&#xff09; root 系统用户(1-999) 一般用户(1000-60000) 组类别 管理组 root 基本组&#xff08;默认组/主组&#xff09; 附加组&#xff08;额外组&#xff09; 7.2 用户管理 7.2.1 添加新用户 语法 useradd 【…

通过java向jar写入新文件

文章目录 原始需求分析实施步骤引入依赖核心编码运行效果 原始需求 有网友提问&#xff1a; 我想在程序中动态地向同一个jar包中添加文件&#xff0c;比如&#xff0c;我的可执行jar包是test.jar,我要在它运行时生成一些xml文件并将这些文件添加到test.jar中,请问如何实现&…

路由模式和打包优化

1. 路由模式-将路由改成history模式 hash模式带#&#xff0c;#后面的地址变化不会引起页面的刷新history没有#&#xff0c;地址变化会引起页面刷新&#xff0c;更符合页面地址的规范&#xff08;开发环境不刷新-webpack配置&#xff09;将路由模式修改成history模式-代码位置(s…

钉钉h5微应用调试 整理

钉钉 H5微应用整理 1.申请H5微应用2.登录3.调试 1.申请H5微应用 https://open.dingtalk.com/ 登录钉钉开发平台。 应用appId、CorpId都可以在网站上自行查找 应用首页地址&#xff08;指手机端显示地址&#xff09; pc端首页地址&#xff08;指电脑端显示地址&#xff09; 我这…

Spring Cloud Gateway学习(1)—— Gateway 的基本概念 引入依赖需要注意的事项 +解决方案 全局网关的入门使用案例

前言 Spring Cloud Gateway 基于 Spring Boot 2&#xff0c;是 Spring Cloud 的全新项目。Gateway 旨在提供一种简单而有效的途径来转发请求&#xff0c;并为它们提供横切关注点。 gateway相当于所有服务的门户&#xff0c;将客户端请求与服务端应用相分离&#xff0c;客户端…

力扣 -- 10. 正则表达式匹配

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:bool isMatch(string s, string p) {int ms.size();int np.size();//处理后续映射关系s s;//处理后续映射关系p p;vector<vector<bool>> dp(m1,vector<bool>(n1));//初始化dp[0][0]true…

走进Spring的世界 —— Spring底层核心原理解析(一)

文章目录 前言一、Spring中是如何创建一个对象二、Bean的创建过程三、推断构造方法四、AOP大致流程五、Spring事务 前言 ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext("config.xml"); UserService userService (UserService) cont…

pytorch第一天(tensor数据和csv数据的预处理)lm老师版

tensor数据&#xff1a; import torch import numpyx torch.arange(12) print(x) print(x.shape) print(x.numel())X x.reshape(3, 4) print(X)zeros torch.zeros((2, 3, 4)) print(zeros)ones torch.ones((2,3,4)) print(ones)randon torch.randn(3,4) print(randon)a …

koa基础应用

不要把koa想得太复杂&#xff0c;他就是一个Node框架而已。 在本地应用安装好Node和koa后&#xff0c;先实现一下简单的服务app.js&#xff0c;代码如下&#xff1a; const Koa require(koa) const app new Koa(); app.use(async (context) > {context.body hello Koa …

CCF CSP认证 历年题目自练Day17

CCF CSP认证 历年题目自练Day17 题目一 试题编号&#xff1a; 201803-1 试题名称&#xff1a; 跳一跳 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   近来&#xff0c;跳一跳这款小游戏风靡全国&#xff0c;受到不少玩家的喜爱…