CMake创建wxWidgets桌面应用

news2024/11/12 9:21:47

CMake创建wxWidgets桌面应用

环境

  • Windows 10
  • CMake 3.28
  • MinGW 64 8.1
  • wxWidgets 3.2.4

wxWidgets

  • GitHub: https://github.com/wxWidgets/wxWidgets/
  • 文档地址: https://docs.wxwidgets.org/stable/page_topics.html
  • 下载地址:https://www.wxwidgets.org/downloads/
    • 点击下载按钮截图_17013379106103.png
    • 找到 MinGW-w64 8.1,下载头文件和库文件
      • 头文件
        • Header Files
      • 库文件(32/64位)
        • Development Files(开发时用)
        • Release DLLs(正式发布时用)
  • 这里样例中是直接引的官方做好的库,最合适你的环境的方式还是从源码构建库。使用源码构建时,操作很简单,直接build即可,不过需要注意官方Git仓库中还引了其他仓库,要记得一并下载,不然执行CMake时会报缺失文件的错。

项目结构

wx-demo   				# 项目目录
--|build			    # 工程构建目录,存临时生成的文件
--|--|...
--|include              # 头文件目录
--|--|...
--|src                  # 源文件目录
--|--|...
--|external             # 引入第三方库文件的所在的文件夹
--|--|wxWidgets
--|--|--|include        # wxWidgets头文件
--|--|--|lib            # wxWidgets库文件
--CMakeLists.txt		# CMake脚本文件
--main.cpp              # 程序入口

截图_17013397502684.png

  • Tips
    • 头文件库文件下载后,要解压,然后放到 ./external/wxWidgets 下(你也可以修改CMake配置),结构如上

项目代码

  • CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(wx-demo 
      	VERSION 0.1
      	DESCRIPTION wxWidgets样例
      	LANGUAGES CXX
  			)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

set(EXTERNAL_DIR ${PROJECT_SOURCE_DIR}/external)

include_directories(./include)
include_directories(${EXTERNAL_DIR}/wxWidgets/include)

aux_source_directory(./src SRC)

add_executable(${PROJECT_NAME} main.cpp ${SRC})

# wxWidgets
# 配置wxWidgets库地址,用于find_package
set(wxWidgets_ROOT_DIR ${EXTERNAL_DIR}/wxWidgets)
set(wxWidgets_LIB_DIR ${EXTERNAL_DIR}/wxWidgets/lib/gcc810_x64_dll)

find_package(wxWidgets REQUIRED COMPONENTS net core base)
if(wxWidgets_USE_FILE)
    include(${wxWidgets_USE_FILE})
endif()

target_link_libraries(${PROJECT_NAME} ${wxWidgets_LIBRARIES})
  • main.cpp
#include "wx/wxprec.h"

#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif


class MyFrame : public wxFrame {
public:
    explicit MyFrame(const wxString &title)
      : wxFrame(nullptr, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150)) {
        // 创建一个面板
        auto *panel = new wxPanel(this, wxID_ANY);

        // 创建一个按钮
        auto *button = new wxButton(panel, wxID_ANY, wxT("Click me!"),
                                    wxPoint(60, 40), wxSize(100, 30));

        // 绑定按钮点击事件
        button->Bind(wxEVT_BUTTON, &MyFrame::OnButtonClicked, this);
    }

private:
    void OnButtonClicked(wxCommandEvent &event) {
        wxUnusedVar(event);
        wxMessageBox(wxT("Hello, wxWidgets!"), wxT("Hello"), wxOK | wxICON_INFORMATION);
    }

wxDECLARE_EVENT_TABLE();
};

wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_BUTTON(wxID_ANY, MyFrame::OnButtonClicked)
wxEND_EVENT_TABLE()

class MyApp : public wxApp
{
public:
    virtual bool OnInit() {
        auto *frame = new MyFrame(wxT("Hello wxWidgets!"));
        frame->Show(true);
        return true;
    }
};

wxIMPLEMENT_APP(MyApp); // NOLINT

CMake构建

  1. 进入项目根目录
  2. 生成构建文件$ cmake -G "MinGW Makefiles" -B build
  3. 构建$ cmake --build build
  4. 最后会在 ./build 目录下生成可执行文件 wx-demo.exe
  5. 界面样例如下

截图_17013386672629.png

  • Tips
    • 直接运行wx-demo.exe,会报找不到*.dll动态库的问题,可以暂时将wx-demo.exe放到 ./external/wxWidgets/lib/gcc810_x64_dll 下运行,也可以使用CMake命令拷贝库文件到exe程序旁

参考

  • https://docs.wxwidgets.org/stable/overview_install.html
  • Using CMake with your applications
  • 【wxWidgets 教程】安装、配置、HelloWorld篇(一)-CSDN博客

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

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

相关文章

后端项目操作数据库-中枢组件Service调用Mapper实现增删改查-实例

接上篇 使用MyBatis配置Mapper实现增删改查 1.Service的基本作用 Service在代码中的的作用是调用Mapper、被Controller调用。是后端项目中非常重要的组件。 用于设计业务流程、业务逻辑,以保障数据的完整性、有效性、安全性。 2. Service使用举例——“添加相册”…

生物信息学分析领域领先的特制语言环境NGLess(Next Generation Less)介绍、安装配置和详细使用方法

介绍 NGLess(Next Generation Less)是一种用于生物信息学分析的领先的领域特定语言(DSL)。它旨在简化和加速NGS(Next Generation Sequencing)数据的分析过程。NGLess具有清晰的语法和功能,使用户…

宝塔面板快速搭建本地网站结合内网穿透实现远程访问【无需公网IP】

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

OpenAI | GPT-4.5“泄露”,价格离谱!

OpenAI “泄露”了GPT-4.5👀 最近,OpenAI “泄露”了备受期待的 GPT-4.5 这个最新的模型带来了跨语言、音频、视觉、视频和3D的多模态功能,开启了复杂推理和跨模态理解的新篇章。 新模型系列包括: GPT-4.5:标准版&…

LeetCode977有序数组的平方两种方法实现(java实现)

今天来分享的是LeetCode977有序数组的平方的实现方法,我们先来看下题目: 提示:我们在读题的时候一定要仔细,注意题目给定的条件是有序数组。 方法1:我们在看到题目的第一时间是无非是将数组每个元素进行平方&#xff…

防御升级!SMC2助力企业高效应对邮箱安全挑战

根据Coremail邮件安全人工智能实验室(以下简称AI实验室)的监测数据显示,2023年Q3全国企业级用户遭受无差别的暴力破解攻击次数虽相比2022年同期有所下降,但仍高达 24.2 亿次,且暴力破解攻击次数有明显回升趋势。 面对正…

关东升老师从小白到大牛系列丛书(由清华大学出版社出版)

助力技术成长,成就大牛之路 在这个科技日新月异的时代,掌握一门编程语言或专业技能已是必备,不再是奢侈。清华大学出版社出版的“从小白到大牛”的系列丛书,涵盖Python、Java、Kotlin、Android和SQL,助你快速在技术之…

Elasticsearch:相关性工作台 - BM25 及 ELSER 的相关性比较

我们知道 Elastics Learned Sparse EncoderR (ELSER) 可以被用来做语义搜索。它是一个 out-of-domain 的语义搜索模型。无需训练,我们就可以得到很好的相关性。有关 ELSER 的更多知识,请参考文章 “Elastic Learned Sparse Encoder 简介:Elas…

QuickLook 万能的 Windows 预览工具

QuickLook 是一款用于 Microsoft Windows 操作系统的轻量级文件预览工具。它提供了类似于 Mac OS X 上的"快速查看"功能的体验,允许用户在不打开文件的情况下快速预览文件内容。我们只需要按下键盘空格键就可以预览文件,当预览的是 docx 等文件…

安装NLTK Data

文章目录 NLTK离线安装1. 获取安装包2. 放置nltk_data文件3. Demo4. 参考链接 关注公众号:『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或CSDN滴滴我 nltk库是python语言为自然语言处理提供的一个功能强大,简单易用的函数库&a…

大疆第九届篮球联赛举办的记忆

首先感谢各位大哥支持,我们自己举办了2023 DJI第九届篮球运动比赛,恭喜各位参赛队伍,收获了荣誉、进行了运动锻炼与交流。 队长们合影留念: 从左往右队长依次介绍为:养生队-大凤、疆来队 - 乔丹 、十二人队 - 腾哥、 J…

Python自动化测试(unittest框架)

一、什么是框架 框架是由大佬开发或者专业的研发团队研发的技术骨架,框架是一个半成品,框架是对常用的功能,基础的代码进行封装的一个工具,这个工具对外提供了一些API,其他的开发者只需要调用框架的接口即可&#xff…

Python学习开发mock接口

#1.测试为什么要开发接口? 1)在别的接口没有开发好的时候, mock接口(模拟接口) 2)查看数据, 避免直接操作数据库 #2.开发接口的顺序 1)安装flask flask是一个轻量级开发框架 pip install flask 2)开发一个接口 开发步骤: 1.实例化一个服务server:f…

访谈型软文写作方式,媒介盒子告诉你

访谈型软文一般用于维护企业形象,分享品牌故事。但是许多企业在写访谈型软文时经常容易跑偏或者写来写去没有逻辑,今天媒介盒子就来和大家分享访谈型软文的写作方式,看完这四点,小白也能写好访谈型软文! 一、 访谈对象…

03鸿蒙ArkTS应用开发及ArkTS语言学习

目录 1、概述1.1、模型到底是什么?1.2、Stage和FA模型最大的区别到底是什么?1.3、ArkTs和JS开发语言该怎么选呢? 2、一张图认识ArkTS应用的工程目录3、ArkTS开发语言3.1、ArkTS语言从哪里来?3.2、ArkTS基本语法 4、开发一个登录界…

SCI期刊投稿的不同状态

投稿过程中的不同状态代表了稿件的不同处理阶段 1. Submitted to Journal 已提交至期刊 刚投稿成功,邮箱会收到确认信件,等待编辑处理稿件,这个状态自然形成,无需作者处理。 2. Awaiting admin processing 等待管理员处理 文…

面对同行恶意排挤,佳卫苗灭杀病毒HPV向市场发出灵魂五问

近期,抗HPV市场因为一款名叫“佳卫苗灭杀病毒HPV”的产品诞生而风起云涌。上市之初,产品方便表示,佳卫苗灭杀病毒HPV的诞生,不仅是为了造福患者,更是为了优化市场、刺激行业升级,以“机理更科学、材料更先进…

Windows进程机制

进程 进程要做任何事情,必须让一个线程在它的上下文运行。该线程负责执行进程地址空间包含的代码。每个进程至少要有一个线程来执行进程地址空间包含的代码。当系统创建一个进程的时候,会自动为进程创建第一个线程,这称为主线程(…

MyBatis--07--启动过程分析、SqlSession安全问题、拦截器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 谈谈MyBatis的启动过程具体的操作过程如下:实现测试类,并测试SqlSessionFactorySqlSession SqlSession有数据安全问题?在MyBatis中,SqlSess…

可观测性是什么?新手入门指南!

如果您之前对可观测性重要性,益处,以及组成不甚了解,本文是一个合适的指南手册。 什么是可观测性? 可观测性被定义为根据系统产生的输出数据(如日志,指标和链路追踪)来衡量当前系统运行状态的…