不建议用wxWidgets,底层有过多的bug
不建议用wxWidgets, 搞了wxWidgets 3年,不是所说的那么容易跨平台,很多bug,不稳定, 莫名其妙的崩溃找源代码修改编译真是费时费力. 开发速度真没有使用本地sdk开发高, 很难定制复杂的控件和界面. 定制了复杂的控件后崩溃发现它的基础的类库有bug, 后悔浪费那3年时间.
http://bbs.csdn.net/topics/391817496?page=6
想问一下你当时用的wxWidgets是什么版本。
我现在用的是 wxWidgets 3.0.2,开发工具用的是 Visual Studio 2015。
没感觉到什么明显的 Bug,挺稳定的。可能是我用的还没有像您那样深入?难道等我用得比较深入了也会遇到您所说的那些坑?这也是说不准的事呢。
不过目前来说,wxWidgets 是我最好的选择,我是指兼顾开发效率与团队作战的情况下。
直接用本地SDK开发的话。。。如果是我一个人的项目我肯定这么干,但团队作战我目前还是觉得用 wxWidgets 比用Windows SDK 要好。
跨平台的事,我目前可以不做跨平台,但长远的打算是要的。用 wxWidgets 本身就是为了使将来跨平台成为可能。没指望到时候一点也不折腾,只要技术上可行就好。
我们公司做界面,通常是用的 OpenGL 方案,有一个我们自己内部的类库,底层是 OpenGL,靠OpenGL来画出各种各样的控件,包括做出各种事件响应什么的。他们这么做是有一定道理的,因为要跨平台,跨的不是Windows和Linux这样的平台,而是跨PC与嵌入式(比如VxWorks)这样的平台。
因为公司那个OpenGL类库比较难用,所以我自己的实验性项目选择了 wxWidgets。
http://bbs.csdn.net/topics/391817496?page=8
1. 用了3.0.2,它实现了自己的一套消息机制,这种消息机制不稳定(也是类似封装消息转发自定义消息那种),嵌套的层次太多,很多系统消息都获取不到. 比如设备插入拔出(可能我不会?),不容易扩展消息.
2. 有时候崩溃点在它的消息处理部分,根本没办法改.
3. 每次升级费老大功夫,编译wx也很费时间.
4. 曾经wxString内部崩溃,这可麻烦大了.
5. 里面也是到处充满宏,没比MFC好多少,比较好的是可以动态绑定处理函数.只要控制了WTL的PreTranslateMessage一样可以自由改.wx可没有类似WTL的那种PreTranslateMessage自定义消息转发!
6. 编译wx也经常编译不过,还限制了编译器的版本.
7. wx里面的代码其实并不好.
真的,我奉劝你不要用wx了,如果想用跨平台就用qt, 它比wx稳定,不过也遇到QString曾经崩溃过.之后再也不想用第3方的ui实现了. 稳定的还是官方自己的std::string或NSString.
qt的坏处就是限制在这个平台上, 不能随意使用系统特性,比如Mac下的原生ui和qt不一样, 也就是qt不能实现某种效果, 这种第3方的永远都落后于平台自己的.
我从2.8.0-2.9.2 开始用到3.0.2 ,之后换WTL和Cocoa. 它的标准控件看样子很强大, 但是不稳定和性能很低, MFC或WTL的OWNERDRAW一样可以很容易实现,而且很多例子学习不是问题.相比之下wx用的人太少,基本都是只能自己去研究,没的参考还浪费很多时间,悲剧的是它还是一个第3方库, win32编程完全用不到它. 它实现的那些文件,流,Socket,wxURL功能很弱,还不如直接用win32 api或者用boost,zlib等独立第3方库.
好的也就只有wxImage和它的控件了.
不建议用wxWidgets,底层有过多的bug的更多相关文章
- 为什么不建议在 HBase 中使用过多的列族
我们知道,一张 HBase 表包含一个或多个列族.HBase 的官方文档中关于 HBase 表的列族的个数有两处描述: A typical schema has between 1 and 3 col ...
- 为什么不建议在hbase中使用过多的列簇
我们知道,hbase表可以设置一个至多个列簇(column families),但是为什么说越少的列簇越好呢? 官网原文: HBase currently does not do well with ...
- 改善python程序的建议[转]
<编写高质量代码 改善Python程序的91个建议> <编写高质量代码 改善Python程序的91个建议>读后程序学习小结 - BigDeng_2014的专栏 - CSDN博客 ...
- android:布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!
1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...
- Android为TV端助力 布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!
1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...
- 精讲RestTemplate第2篇-多种底层HTTP客户端类库的切换
本文是精讲RestTemplate第2篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 RestTemplate只是对其他的HTTP客 ...
- wxWidgets源码分析(9) - wxString
目录 wxString wxString的中文字符支持 Windows Linux Unicode Linux UTF-8 总结 wxString与通用字符串的转换 wxString对象的创建 将wx ...
- wxWidgets源码分析(4) - 消息处理过程
目录 消息处理过程 消息如何到达wxWidgets Win32消息与wxWidgets消息的转换 菜单消息处理 消息处理链(基于wxEvtHandler) 消息处理链(基于wxWindow) 总结 消 ...
- 电容式触摸控制器PCB布局
在目前市场上可提供的PCB(印刷电路板)基材中,FR4是最常用的一种.FR4是一种玻璃纤维增强型环氧树脂层压板,PCB可以是单层或多层. 在触摸模块的尺寸受限的情况下,使用单层PCB不是总能行得通的, ...
随机推荐
- gem安装时出现 undefined method `size' for nil:NilClass (NoMethodError) 的解决办法
终端输入gem env 得到gem的PATH路径,比如 - GEM PATHS: - /usr/local/ruby/lib/ruby/gems/2.1.0 - /home/vagrant/.gem/ ...
- Java-装饰模式(转)
装饰模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关 ...
- windows 编程 —— 消息与参数(滚动条、键盘、鼠标)
目录: 滚动条 键盘 鼠标 滚动条ScrollBar 发送消息:WM_VSCROLL和WM_HSCROLL 参数wParam:wParam消息参数被分为一个低字组和一个高字组.wParam的低字组是一 ...
- angular Error: [ng:areq]
在使用augularjs的时候,爆了个错误: 后来经过对比,原来是我的<html>标签多了点东西
- [Javascript] Add a browser build to an npm module
In this lesson, we're going to use webpack to create a UMD (Universal Module Definition) build of ou ...
- lamp安装指南(转)
主要软件包, 1. httpd-2.2.6.tar.gz 2. mysql-5.0.45-linux-i686-glibc23.tar.gz ( 这个版本是已编译好的压缩包,解压后稍做配置即可使用 ) ...
- linux怎么给一个普通用户reboot权限?
分四种情况讨论:1.让任何人(包括根本不拥有系统帐号的人)都可以通过控制台reboot在/etc/inittab文件中保留ca::ctrlaltdel:/sbin/shutdown -t3 -r no ...
- Java编程 的动态性,第 2部分: 引入反射--转载
在“ Java编程的动态性,第1部分,”我为您介绍了Java编程类和类装入.该篇文章介绍了一些Java二进制类格式的相关信息.这个月我将阐述使用Java反射API来在运行时接入和使用一些相同信息的基础 ...
- Java基础知识强化83:System类之gc()方法(垃圾回收)以及和finalize()区别
1. System概述: System类包含一些有用的类字段和方法.它不能被实例化. 2. gc()方法:垃圾回收器 public static void gc() 调用gc方法暗示着Ja ...
- js中的隐式转换
js中的不同的数据类型之间的比较转换规则如下: 1. 对象和布尔值比较 对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字 [] == true; //false [] ...