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

wxWidgets从空项目开始Hello World

前文回顾

接上篇,已经是在CodeBlocks20.03配置了wxWidgets3.0.5,并且能够通过项目创建导航创建一个新的工程,并且成功运行。

那么上一个是通过CodeBlocks的模板创建的,一进去就已经是2个头文件+2个cpp文件,总是感觉缺少点基础,不看一下从空项目怎么弄出wxWidgets总感觉不爽。

从空项目开始的wxWidgets

创建新的空项目

  1. 新建项目--> empty project
  2. 新建一个 empty file,保存为wxMain.cpp

Hello World的代码

一个wxWidgets的最简单程序,需要一个MyFrame类继承wxFrame用于窗体UI,另外需要一个wxApp类来控制程序,且需要重写OnInit()函数。

#include <wx/wx.h>class MyFrame: public wxFrame		// MyFrame要放在上面
{
public:MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size): wxFrame(NULL, wxID_ANY, title, pos, size){};};class MyApp: public wxApp			//MyApp会调用 MyFrame
{
public:virtual bool OnInit(){MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) );frame->Show( true );return true;};
};wxIMPLEMENT_APP(MyApp);			//程序入口

此时在CodeBlocks中的状态如下图所示:

遇到的几个问题及解决

1-wx/wx.h:No such file or directory

||=== Build: Debug in wxEmpty03 (compiler: GNU GCC Compiler) ===|
.\wxMain.cpp|1|fatal error: wx/wx.h: No such file or directory|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

找不到wx/wx.h文件或目录,这是因为没有指定include的目录,这个目录就是Gcc_dll/include,所以我们把它在项目的Build Option...中添加上就可以去下一步了。

2-wx/setup.h :No such file or directory

不仔细看好像上一个问题没解决似的,但这里的确是换了一个文件夹,这里的2个文件分别在不同的文件夹下,我们用一个表格来表示:

wxMSW_305_bin/
include/
msvc
wx              
setup.h
wx
wx.h

由上表可见,第1个问题是include/wx/wx.h ;而第2个问题是include/msvc/wx/setup.h,解决方法与第一个相似,Add一个include的路径到./msvc即可。

3- 一堆Error

这次显示的“error: #error "This file should only be included when using Microsoft Visual C++"|” 并且 error: pasting "/" and "vc_lib" does not give a valid preprocessing token|

这个已经提示跟lib有关系了,考虑到前面2个问题都是include目录没有指定造成的,那当前的错误就很可能是lib的目录没有指定造成的?这里可以去参考一下前一节模板出来的Build Log,我们加上 -I 再跟上lib所在的目录就可以了:

4- 运行时错误

上面的gif最后已经显示了运行时错误,找不到几个.dll文件。

那么回想一下,到目前为止的操作中就没有指示Linker的路径,所以到Build Option里去添加上就可以了!

小结

从空项目开始,则需要指示wx.h以及setup.h的include的路径;还需要添加 -I mswud的路径;最后还要在Linker中添加.dll的路径,这样就可以成功运行了~

http://www.lryc.cn/news/151814.html

相关文章:

  • 【Apollo学习笔记】——规划模块TASK之SPEED_DECIDER
  • 【操作系统】一文快速入门,很适合JAVA后端看
  • C++ Primer阅读笔记--allocator类的使用
  • 【C++历险记】面向对象|菱形继承及菱形虚拟继承
  • 【Locomotor运动模块】攀爬
  • ELK安装、部署、调试(一)设计规划及准备
  • 【CSS】解决对齐的小问题
  • 【狂神】Spring5(Aop的实现方式)
  • 第2章 Linux多进程开发 2.18 内存映射
  • 【C++深入浅出】类和对象上篇(类的基础、类的模型以及this指针)
  • 气象站在日常生活中的重要性
  • 数据结构学习系列之用队列实现栈功能与用栈实现队列功能
  • PY32F003F18P单片机概述
  • 查看GPU占用率
  • 设计模式-中介者模式
  • react 大杂烩
  • 图解 STP
  • Kubernetes技术--k8s核心技术Controller控制器
  • Kubernetes技术--k8s核心技术 Secret
  • day27 String类 正则表达式
  • Java设计模式:四、行为型模式-10:访问者模式
  • 【juc】读写锁ReentrantReadWriteLock
  • Linux开机启动Tomcat
  • javaweb、spring、springmvc和springboot有什么区别,都是做什么用的?
  • 已解决module ‘pip‘ has no attribute ‘pep425tags‘报错问题(如何正确查看pip版本、支持、32位、64位方法汇总)
  • Matlab(画图初阶)
  • 汽车自适应巡航系统控制策略研究
  • C语言面试题值反转字符串
  • 【大数据】Apache Iceberg 概述和源代码的构建
  • 对分库分表进行批量操作