百科问答小站 logo
百科问答小站 font logo



请问目前做windows桌面应用程序,MFC、QT、C#哪个更好? 第1页

  

user avatar   skywind3000 网友的相关建议: 
      

第一:先把 C# 毙掉,没什么好说的(楼上楼下推荐 c# 的他们都不够成熟,或者只会 c# 不会其他)

第二:消费级产品,不需求性能的话,用 electron,这样后面你们开发 web 版的话和桌面版就能服用很多,前端总是最不缺的,招聘一大把,但是任何 electron 项目开发大了,都需要自己编译裁剪 electron ,自己开发 native 组件,这个你们也要准备好。

第三:生产力工具,或者考虑性能问题,不论跨不跨平台,用 Qt,其他几个都别用。

Qt 即可用 C++ 来写原生 Qt,还能用 PyQt 快速堆逻辑,除了对标 Native WinForm 的 QtWidgets 外还有更轻量级和灵活的 QtQuick (类似 html)。

--

我已经说过无数次了,且不说后两者的跨平台了,c# 比开发简单出活快,以及招聘容易,比不过 electron;而比高性能和强大,又干不过 qt。处在一个十分尴尬的位置上,所以除非组里一堆人都对 C# 很熟,而另外两个根本没碰过的情况才可能推荐 c#,否则基本都选另外两个,新团队更是这样。

工控领域不适合 Electron?

你们在搞笑么?前两久发射的 SpaceX 的 Dragon 2 飞船,就使用 Chromium + JavaScript 做 UI,同系列技术栈。

你们这些做工控的别太保守,向先进科技看齐,别把老技术当传家宝一样要传三代人。

--

补充,2020年 7月程序员平均工资(招聘网站统计)

可以看到,C# 的薪水是垫底的,同样搜索工作机会,腾讯 C++ 一共 1426 个职位:

还有 Python 招聘 1055 个职位:

最后 C# 只招聘 80 个职位:

可以看到 C# 也是垫底的。


user avatar   yinfupai 网友的相关建议: 
      

限定windows平台上,.net 方案最佳,考虑性能不过份界面频繁改动的,用本地Form,如果可能有跨平台需求,原生Form可以考虑mono。

界面性能要求不那么高,只需要好看些的界面,windows上考虑wpf,如果有设计师配合,实现也比较容易,如果需要跨平台,可以使用面向.net core的avalonia ui,完全开源的。

需要注意的是,如果使用prism开发mvvm,或是用reactive ui,从原生wpf移植到avalonia,大多界面引用库及命名空间,ui描述与逻辑代码可以不动,直接移植。

至于写C++编译后本地调用,无论是windows还是liunx或是mac上,.net core里的invoke表现都尚且良好。

除此之外,QT是一个不错的方案,qml编写界面样式很好用,qt的信号槽也挺好用,但是项目大了后,一贯的C++编译速度是个问题,还有string各种转换等等,每次debug等待时光难熬。

pyQT方案,除非项目成员个个能力很强,不然只能做不大的项目,因为项目大了,文件多了,各种奇特的语法糖,最后很容易成为一坨烂泥,更不说其中各种坑,在可规范性上不如C#。

其它没尝试过,不过html加js写桌面应用界面的方案,十多年前开始有人尝试了,至今还是缺乏足够简单好用的成熟方案,自己玩玩可以,除非技术实力强,遇到坑能强力踏过去,不然开发产品还是多斟酌:)


user avatar   rocwon 网友的相关建议: 
      

Delphi 7...


user avatar   liu-shi-chao-67-87 网友的相关建议: 
      

首选,题主问的这几个概念并不是竞争关系。C#是语言,另外俩是框架。

C#语言可以使用MFC和QT,也能用GTK,还可以用DX、OpenGL、Unity。编译成WebAssembly还能用Html5,做成CS的你还可以直接用浏览器做UI。还可以用SDL。

这些技术都一直存在是因为各有专精,并不能彼此完全替代。

技术选型要看你实际的项目需求。把你的核心需求列出来。在候选技术中比较,给匹配度打分。

科学决策。

是否要跨平台?跨哪些平台?

是否要3D?占比多少?

UI是核心价值吗?

是否有交互动画?

核心用例是怎样的?

团队有过哪些经验?能否招到需要的人?


如果是学生的话,推荐从WinForm和Unity上手,兼顾上手平滑和有内涵。之后了解下WinForm的背后实现是怎么映射到win32的,GLSL/HLSL,H5Canvas在FireFox和Chrome上的行为差异,测测同样效果在个框架下的性能差异。


user avatar   Ivony 网友的相关建议: 
      

都扔了,直接用Electron什么的嵌个浏览器内核最好……


user avatar   amanjiang 网友的相关建议: 
      

更新。微软现在在鼓捣 .Net 6 以及 MAUI 了。MAUI 的意思是 Multi-Platform App UI,多平台应用程序用户界面。它的广告语是“Build beautiful,native UI for any device”,为任何设备创建漂亮的原生界面。说实话我着实激动了一番。然后又泄气了。原因是,微软的这个多平台里面不包括 Windows 7,也不包括 Linux——虽然广告语里没提。当微软提到 Windows 的时候,如果没有特别说明,指的是最新版本的 Windows,我应该明白这一点。

我认为对于 UI 库来说,能够跨平台是重要的。一是学习成本。你费力的学了一个 UI 库,也做了很多工作,结果某天遇到另一个平台的需求时,你发现这些知识完全用不上了。二是维护成本。假设应用程序是跨平台的,每个平台都用原生开发,就需要同时维护多个 codebase。VS Code 最初想做的是基于浏览器代码编辑器(Monaco),所以后来顺理成章地应用了 Electron——值得思考的是如果,VS Code 不是 JavaScript/TypeScript 写的,还要成为 world-class code editor,他们会选择怎样的技术栈呢?应该不是 .Net 吧?

Electron 也不是没有问题。我倒不是说 JavaScript 是一门糟糕的语言,但是,当工程变得原来越大之后,显然类型系统是很重要的,为此你就要学习 TypeScript。然后,作为一个非互联网程序员,你还要去掌握 node.js,HTML/CSS,前端技术,各种前端框架。而且,为了访问你的核心代码,你还需要将你的 C++ 代码封装为 node.js C++ addon——最后,你终于可以用前端的思路去写 UI 了。效率优化可能也是必走的路。内存占用可能也会很高。这些都将是等待你去解决的问题。VS Code 能把它做成今天这个样子,是真的很强。

再来说说 Qt。Qt 的最新版本 Qt6,Windows 这边也是只支持 Windows 10,Linux 那边,Ubuntu 只支持 20。所以如果想真正的跨平台,支持 Windows 7 和 Ubuntu 18 这些旧系统,只能选择 5.15 这个版本。这个版本支持到 2023 年,希望那个时候地球上已经没有人用 Windows 7 了。

我为什么纠结 Windows 7 之类的旧系统?因为计算机语言是跨平台的,你写的代码只要稍微注意一些理论上就能跑在任何系统上。只是因为 UI 界面库,就限制了它能运行的平台,这不合理(当然也不是走极端,放弃 XP 我没话说,虽然今天 VS 也完全可以编译出能在 XP 上运行的程序)。



更新,最近在学习 Electron,也许这才是我心中一直想要的 GUI 框架。拭目以待。


非常遗憾的是,在多次折腾之后,微软到今天都没有给我们提供一套易用的、成熟的、现代的 GUI 开发框架,更别说跨平台。

Windows 10 竟然自带两套不同风格的 UI,足以见证其扭曲;而微软自家的软件如 Explorer,Edge,Office,Visual Studio 甚至长得都不一样,你能相信吗?也即是说,微软的程序员可能也很纠结——以 Office 为例,(据说)是在 Win32 API 上构建了大量的 C++ 代码实现的——如果每一个微软的产品都要单写一套 GUI Framework,某种程度上我认为这是一种幽默。

MFC 早就过时了,而且它不跨平台;与它很像的跨平台的 wxWidgets 也一样,编码风格难以直视。我认为把时间花在已经过时的库上并不值得,除非没有选择。

基于 .Net framework 的,分发的时候你要让用户安装 .Net framework,这会挡住一部分用户(吐槽一下某些硬件厂商的驱动程序软件安装的时候需要先安装指定版本的 .Net framework,是在开玩笑吗,一个设置界面能有多复杂还要用 .Net framework 来写?一个驱动程序不要给自己加那么多戏好吗)。另外不跨平台,甚至连 Windows 平台都不跨——比如微软目前推崇的 UWP 框架,它仅支持 Windows 10,而 2020 年据外媒统计地球上仍有 2 亿 Windows 7 用户,我不知道有没有算上中国盗版用户。如果这些方面能够接受,可以用 C# 来做 GUI。

Qt 倒是还可以,C++ 跨平台 GUI 库可能也只有这一家比较靠谱了。不过它的那些 DLL……数量多,体积大……难受。

也许 GUI 的世界就是这样充满纠结的,毕竟它是很复杂的,特别是对于一些小型软件来说,GUI 甚至可能比核心业务逻辑更复杂。


user avatar   davidtsang 网友的相关建议: 
      

pyqt开一个webview, js加html,我感觉是最简单的


user avatar   pansz 网友的相关建议: 
      

这就是,字面意思理解就行吧。

所以,你是不理解属性,还是不理解堆区开辟,还是不理解拷贝构造,还是不理解浅拷贝?

我给题主一个思路,去学习下浅拷贝的含义,估计应该问题就解决了。




  

相关话题

  知乎用户 @萧井陌 写代码什么水平? 
  怎样实现浮点数除以一个数再乘以这个数结果等于原值? 
  如何看待云⽶发布 1=N44,⼀站式全屋智能有何特别? 
  如果C语言程序在一台电脑上可以运行,到另外一台就运行出问题是什么原因? 
  随着科技的发展洪水能不能得到有效的治理,与建造跨海大桥这些超级工程相比,技术上难度在哪里? 
  作为一名程序员需要掌握的相关知识是需要「广」还是「精」? 
  NoSql是一种语言,还是一种概念? 
  为什么电脑不像手机那样多用软件实现功能而是主要用网站来实现? 
  世界是否过度依赖中国(制造)? 
  如何看待贝索斯说的:“如果我们有一万亿人,就会有1000个爱因斯坦”? 

前一个讨论
如何看待纽约华人当铺遭示威者洗劫,老板娘被打断双腿住进 ICU 一事?示威之下,美国真实情况是怎样的?
下一个讨论
买小米和红米的手机的人收入普遍都不高吗?





© 2024-06-23 - tinynew.org. All Rights Reserved.
© 2024-06-23 - tinynew.org. 保留所有权利