wxwidgets,qt开发效率高吗?
Qt的网络模块性能比较差,而且难以提升,这是硬伤,除非Qt把现有的架构推倒重来。
此外,Qt的UI运行效率与wxWidgets,Windows的MFC,Linux的GTK+也都没法比。
主要原因之一是Qt的信号槽这个核心机制,给开发带来便利,但因此也丧失了一些性能。
Qt的信号槽调用涉及链表操作,事件处理,还包括最伤性能的互斥锁,等等,相比直接回调方式。多出100多行代码,按官方说法,信号槽调用比直接回调慢了10倍左右。可是估计一旦遇到锁竞争,恐怕远远不只10倍了吧。
Qt的UI与网络模块都严重依赖信号槽机制。 不过,相对于Java、C#之类,Qt毕竟是C++,运行效率自然要胜出很多。 Qt开发效率在C++库中绝对是高的,Qt自带的一套非常完备,应有尽有。 运行效率,在Qt中分为好几套图形系统,差不多代表了2D描画的发展史。
最经典的软描画系统,性能只能说差强人意,而搭建在OpenGL上的新系统效率就高的多。
而且,作为原生C++语言(QML除外),天生在性能上也有加成。
这些语言的优劣势对比有哪些?
QT、WPF、PyQt、Electron 桌面应用解决方案
C++的 QT
背景
Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上,Qt 同X Window上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的MFC,OWL,VCL,ATL 是同类型的东西。优势
非常多的跨平台Desktop Application是基于QT编写的,它不仅能够保证跨平台,而且能够将运行效率最大化。Qt适合一些性能要求高的桌面应用,如果你只打算做桌面端的话。或者是一些特殊的场景,比如你要做个类似绘声绘影的视频编辑器,做个类似word之类的桌面应用,那你用electron要么是没法做,要不就是体验非常烂。实际应用上,比如wps,yy语音,VirtualBox,以及部分adobe的桌面工具都是Qt做的。C# 的WPF和WinForm
Winform
大多数人开发CS程序都是基于Winform去做的,它的有点在于简单、高效,但是它的缺点在于,如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样式表来讲,美化Winform的界面以及自定义控件是需要耗费更多的时间的。写的程序如果需要改界面牵扯很大。代码的编辑可能会导致更多的错漏出现而不自知。大工程改界面更甚。wpf
优势
wpf需要学习xaml,有全新的ui描述语言,特别是可以通过模板的嵌套实现复杂的元素,通过style实现类似css的功能,通过比winform完善的多的数据绑定机制实现业务逻辑可以专心对数据而不是界面进行开发。学习wpf可以更方便过度到其他xaml相关技术,这是微软目前广泛使用的技术,比如接下来的windows通用应用。采用mvvm(model、view、viewmodel)来写,任你界面改翻天,后台代码不受任何影响。WPF不能运行在其他操作系统,并且在XAML中编写样式表,通用性还是不如HTML强,从学习应用的范围来讲,还是HTML更好一些。与分辨率无关WPF是基于矢量绘图的,因此它产生的图形界面能够支持各种分辨率的显示设备,而不会像WinForm等在高分辨率的现实设备上产生锯齿。硬件加速技术WPF是基于Direct3D创建。在WPF应用程序中无论是2D还是3D的图形或者文字内容都会被转换为3D三角形、材质和其他Direct3D对象,并由硬件负责渲染,因此它能够更好的利用系统的图像处理单元GPU,从硬件加速中获得好处。绚丽的展示效果,WPF(Windows Presentation Fundation)顾名思义其强大的图形化API为程序提供了超乎想象的图形效果; XAML的引入,使得美工和程序可以实现分离,使得定制化主题/外观/行为更加方便也易于维护;强大的 “数据绑定”功能,使得MVVM得以实现,成为“属性驱动”,而非WinForm的“事件驱动”;属性的更改可以自动获得,甚至动过转换器触发各种展示/行为的变更;Style可以让你应用不同的样式到不同的控件,而且易于管理Python的PyQt
PyQt5是python的一个GUI框架,存在界面设计器QtDesigner工具,可便捷的采用拖拽方式进行页面构造。然后通过工具将UI文件生成对应的python代码。优势:
跨平台效果好,完美支持Mac、Windows、UNIX等多种系统;学习简单,面向对象的特性体现的比其他框架明显,在命名,继承,类的组织等方面保持了优秀的一致性,代码写起来比较优雅。功能强大,基本能实现QT能实现的所有功能文档丰富,PyQt使用者众多,同时可直接参考QT文档,对后期开发更加方便拥有QT Designer和QSS支持,界面效果更好pyqt5是双重许可,开发者可以在GPL和商业许可之间进行选择学完PyQt5之后只要再学习C++就能完成Qt开发转行,一举两得配合Django实现CS和BS全技能开发长期维护是很多程序员选择框架的重要标准,毕竟一个项目的运行周期可能很长,如果框架不能及时支持,后期带来的麻烦会很多开源免费,稳定性和安全性都好使用信号和槽机制,界面设计和业务代码分离开发JavaScript的 electron
特点:
Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。Electron适合一些偏业务的应用,对性能没有很多要求,主要是业务逻辑和UI展示,比较轻量级的应用。因为Electron可以一份代码同时得到网页版和桌面版,所以如果你的应用还需要网页版,那么Electron可以极大地节省你的开发和维护成本。比如钉钉,slack,现在越来越多的偏业务型(并不是需要高性能的专业工具)应用开始使用Electron来做了。优点开源的核心扩展比较容易,目前是基于 node 6.x,加之现在 gyp 已经非常人性化了,使得c++ 和 js 搞基非常容易。界面定制性强,原则上只要是Web能做的他都能做。是目前最廉价的跨平台技术方案,HTML+JS 有大量的前端技术人员储备,而且有海量的现存web UI 库。大多都很靠谱。相对其他跨平台方案(如 QT GTK+ 等),更稳定,bug少, 毕竟只要浏览器外壳跑起来了,里面的问题不会太多 ,当然我也遇到过一些暗坑。 方便热更新。下载覆盖完事。当然这是所有脚本共有的优点。缺点: 1.卡,启动慢,这可能是webkit的锅。毕竟一个浏览器要支持的功能确实有点多。 2.除了主进程 你可能还需要启动一些辅助进程来完成工作。而每当你新开一个进程,起步价就是一个nodejs的内存开销! 3.丢帧,这个最严重,可我已习惯了native 的丝滑. mac下感觉还可以 win下有点够呛。 4.打出来的包太大。(很显然,即便是一个空包,也至少包含了一个浏览器的体积)设计的管理系统的优点?
优点 ·
C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。
· C++设计成直接的和广泛的支持多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。
· C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。
· C++设计成尽可能与C兼容,籍此提供一个从C到C++的平滑过渡。
· C++避免平台限定或没有普遍用途的特性。
· C++不使用会带来额外开销的特性。
· C++设计成无需复杂的程序设计环境。
出于保证语言的简洁和运行高效等方面的考虑,C++的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,Bjarne Stroustrup的《C++语言的设计和演化》(1994)里做了详尽的陈述。
C++在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C++的集成开发环境中完成的。C++相对众多的面向对象的语言,具有相当高的性能。
C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C++。
代码性能
人们一般认为,使用Java或C#的开发成本比C++低。但是,如果充分分析C++和这些语言的差别,会发现这句话的成立是有条件的。这个条件就是:软件规模和复杂度都比较小。如果不超过3万行有效代码(不包括生成器产生的代码),这句话基本上还能成立。否则,随着代码量和复杂度的增加,C++的优势将会越来越明显。造成这种差别的就是C++的软件工程性。
缺点
C++由于语言本身过度复杂,这甚至使人类难于理解其语义。更为糟糕的是C++的编译系统受到C++的复杂性的影响,非常难于编写,即使能够使用的编译器也存在了大量的问题,这些问题大多难于被发现。
由于本身的复杂性,复杂的C++程序的正确性相当难于保证。也有人提出不支持多线程的原语等缺陷。不过有如此多的知名人士提出了如此多的缺陷,正说明C++被广泛使用和成功。
c++语言由于过度的复杂性,以及与unix的文化相抵触,在unix/linux领域受到很多著名人士(比如Linux之父linus torvalds与著名黑客Eric S. Raymond)的强烈批评与抵制。
做windows界面?
使用Qt吧,前提是在这两者下进行选择。既然提到了Qt和MFC,我想题主肯定是一个C++的开发者。其实,在我看来,Windows下开发界面程序,还有很多其他的选择。下面我就连同Qt、MFC一起来介绍一下几种常用的界面开发框架。
Qt,Qt之前是被诺基亚作为塞班操作系统的主力开发工具,后被广泛应用于PC领域的开发。Qt最大的优势在于它的跨平台特性,可以实现一套代码编写不同平台下的应用程序,目前多用于Linux系统下的GUI程序开发,Windows下也有一些使用。
MFC.MFC的全称叫做Microsoft Foundation Class(微软基础类库),它是将Windows的基础api封装后的一个GUI开发框架。它最大的优势是可以直接使用Windows的系统api,实现程序性能的最大化。它的劣势在于逻辑太过复杂,会让初学者望而却步,事实上,很多大学计算机课堂上都已经不在讲授mfc(MFC背戏称为没饭吃)了。
C#.咦,不是在讲C++吗,事实上,很多Windows下的程序都是使用C#快速开发出界面,在用C++实现后台控制,这样既能快速开发出好看美观的界面(C#优势所在),又能实现高效的后台(C++的优势),岂不快哉。
WEB.既然C#都能开发GUI,那么比C#语法还要简单的web开发语言不行吗?当然可以了。这里举个栗子,大名鼎鼎的PC端词典软件有道英语词典正是WEB&C++搞定的。网易的大牛们使用WEB(如HTML5)技术快速开发出酷炫的界面以及网络通信模块,再用c++实现算法及其他控制模块,就这样最大限度的实现了界面的美观性和程序性能的整合。
当然,Windows下的界面开发技术还有很多,欢迎大家关注太科罗技,并在下方积极留言讨论。用哪个图形界面库合适?
c++哪个图形界面库合适?这个目前来说非常多,简单易用的就是qt,组件众多、容易上手,支持跨平台,复杂一些的就是mfc,仅限于windows平台和老项目,下面我分别简单介绍一下,感兴趣的朋友可以尝试一下:
简单易用qt这是一个非常流行的c++桌面应用程序开发框架,相信大多数开发者都听说或使用过这个框架,应用广泛、支持跨平台,有一套非常便捷、易用的ui设计工具,组件众多、功能强大,只需简单拖拽、编辑属性,即可快速构建一个可视化程序,所见即所得,支持众多数据库开发,包括mysql、mssql等,如果你熟悉c++,那么qt非常容易上手,只需几天便可轻松入门,社区活跃、官方资料众多,非常值得学习和使用:
经典复杂mfc这是一个非常经典的c++桌面应用程序开发框架,微软自主设计研发,仅限于windwos平台,在早期桌面开发中非常流行,一直扮演着重要角色,和qt一样,mfc也自带有可视化设计工具,只需简单拖拽、编辑属性,即可快速构建一个GUI桌面程序,省去了大量代码编写和优化,但设计思想太过复杂、灵活度不高,正在逐渐走向没落,只有一些老项目还在使用,初学来说,也不容易掌握,需要一段时间熟悉才行:
免费开源wxwidgets这是一个非常著名的c++桌面应用程序开发框架,免费开源跨平台,相信许多开发者都听说或接触过这个图形库,wxpython就是基于wxwidgets开发而来,与qt仿平台外观不同,wxwidgets完全使用平台自己的库创建图形接口,不需要再添加额外层代码,因此运行速度更快、也更高效,不管私用还是商用,都完全免费,如果你有一定c++基础,学习起来也会十分迅速,很快就能入门:
当然,除了以上3个不错的c++图形库,还有许多其他库也非常不错,像duilib等,只要你有一定c++基础,熟悉一下相关示例和代码,很快就能掌握的,简单易用的话,就推荐qt,对于课设来说,完全够用了,也非常容易学习和上手,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
还没有评论,来说两句吧...