做windows界面,用QT还是MFC?

做windows界面,用QT还是MFC?,第1张

使用Qt吧,前提是在这两者下进行选择。既然提到了Qt和MFC,我想题主肯定是一个C++的开发者。其实,在我看来,Windows下开发界面程序,还有很多其他的选择。下面我就连同Qt、MFC一起来介绍一下几种常用的界面开发框架。

其实选什么学习还得根据自身的需求。语言不分好坏在于人。精通才是正道。当下window下流行的编程语言,有vb,mfc,c sharp,。如果没啥限制,建议第三个吧,简单粗暴上手快,开发效率也高。如果公司或硬件限制必须用mfc或其他语言,那学就是。都是微软的产品,我开发项目都用过,知识通用。至于qt封装是全,相对微软自家的产品,用的人少些。问题多靠自己解决

具体选择QT还是MFC,这要根据题主的需求来决定。如果你入职一家公司,做的是老项目的维护,而原有项目是采用MFC来开发,那么当然,你没得选,只能老老实实的继续MFC,虽然这玩意写起来真的很虐心。如果是一个全新的项目,那么还是首选Qt。

下面根据自己的认识,推荐几款Windows下开发界面开发常用技术。

1)Qt

号称可以跨平台,语法结构简单清晰。面向对象的特性体现的比MFC明显。代码写起来比较优雅,也就是说上手会快一点,最新版本支持的特性QML,可以让我们用JS,CSS来绘制客户端界面,写起来效率也是蛮高的。缺点就是文档可能没有MFC那么齐全,基本只有官方的官网和Demo,而且发布包体积会比较大。

2)MFC

全称Microsoft Foundation Classes(微软基础类库),可以算的上是上古产品了吧,目前除了维护老项目,应该很少有团队使用MFC来开发了吧。基本上MFC == “没饭吃”。建议如果你是初学者,界面开发还是不要选择MFC了。它唯一的好处就是微软的MSDN文档比较齐全,相关论坛和那种问答的资源要多很多,一般初学者遇到的问题都可以看到前辈们的解决方法。不过目前它已经被其亲爹微软抛弃了。

3)Duilib

目前已开源,是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率。唯一不足的是原开发者已经停止维护,很多都是个人在维护,出了问题的话,只能自己去摸索,Debug。下面是一款个人使用Duilib开发的迅雷播放器界面效果。

最后附上一些基于Duilib开发的软件不完全列表(欢迎大家补充指正):

百度: PPS 爱奇艺 百度杀毒 百度卫士 91助手

腾讯: 微信 企业微信

阿里: 钉钉 支付宝安全控件 PP助手

书生云: 书生企业云盘

微软: 微软壁纸

网易: 易信 云音乐 荒野行动PC版

华为: 华为网盘

金山: 金山快盘

京东: 咚咚

cctv: cbox

酷我: 酷我音乐盒

蘑菇街: TeamTalk

火绒: 火绒安全软件

盘古: 盘古越狱工具

顺网: 网维大师 91y

网狐: 网狐经典版

墨迹风云: 墨迹天气

zoomcloud: Zoom 视频会议

搜狗: 搜狗手机助手

沃通: 沃通代码签名工具

驱动人生: 驱动人生 人生日历

维棠: 维棠

深圳市北斗智研 科技 : 智能办公助手 ERP管理系统

4)Electron

这玩意应该是这几年才火起来的吧,宣城自己可以通过使用JavaScript、HTML和CSS构建 跨平台 的桌面应用程序,让人们感觉 JS 真的有一统天下的趋势(Web、移动端、PC客户端)。开发效率真心的高,不过貌似商用上还不是特别的多,典型的成功案例目前知道的有VSCode,Atom。

两者之间二选一的话肯定选Qt了,如果再考虑开发效率与运行效率的话,可以在Python平台上使用Qt的Python绑定库PyQt,再配合C++,主体用Python语言,界面部分用PyQt搭建,核心算法部分用C++封装成动态库DLL文件,在Python里去调用。这样是一个不错的方案,Python部分缩短了开发时间,C++部分保证了运行速度,只是前提是,你要会用C++写DLL,在Python里会调用DLL。

作为做了近2两年windows application的人来说,我直接说Qt!首先我主要做pc和下位机通信的app,如串口、tcpip、总线类等。选qt理由如下:仅从我的经历来讲

1、Qt开发效率高。我第一个项目前几个项目用的MFC,平均时长3个月,一个软件80%的时间都放在界面上去了。然后后面开始使用Qt,一个月能做好几个app没压力,界面布局很方便,不用像MFC去一个一个控件拖动。

2、Qt库简单易懂。个人的感觉就是MFC与win api联系太大了,你要玩转MFC,必须要把windowsapi相关知识搞得明明白白的。而Qt库把每一个功能都封装得很好,很容易去使用,不需要没事就百度怎么用。

3、MFC已经在淘汰边缘了。到如今Qt还在不断更新,我目前使用的是Qt59。在平时招聘的时候,也很少看到有公司让你专职做MFC,要么Qt,要么C#。

4、Qt跨平台。我当初换Qt的一个原因还是,我以后如果不做windows了可以换linux上位机,Qt可以做到很好的跨平台,而MFC不行。

两者没有好坏之分,需要看应用场景。如果是界面要求不高,稳定性和效率要求高的工业软件,MFC是最好的选择。如果是界面要求美观,跨平台使用,QT是最好的选择。但是要注意的是QT企业用是需要授权费的。另外,windows上的界面还有其他选择wpf,direct ui等。这里着重提一下direct ui,目前可以找到比较好的就是duilib这个界面库,开源稳定易用高效。关注我一起探讨呀!

我们来简单比较一下QT和MFC。

1开发速度

整体来说可能MFC会快捷一些,因为windows平台的开发工具大多很智能,因为立足于windows的开发人群很广,从菜鸟到专业人士,但是QT由于基于Linux,可用的开发工具不多,大都比较专业,多是第三方产品,而且集成度不大,第三方库也没有MFC得多,从这一点MFC略胜一筹,但是QT自从被Nokia收购后,官方发布了跨平台集成开发环境QTCreator,所以之后走向就不好说了,个人总体感觉QT Creator和VSnet差距比较大,还需改进。

但是从库本身来说QT集成的功能较MFC庞大,而且使用的封装技术信号和槽也是比较受到赞许的,比如QT Script为QT提供嵌入式脚本,QT界面库支持CSS,所以QT做出来的界面比MFC要好,而且比较容易,MFC就需要借助第三方库了。

因为MFC是浅层封装(最新的2008 sp1加入了BCG的高级界面库,可能有所改善)windows SDK,以降低使用windows SDK引起的开发效率的降低,和开发难度的增加。

所以QT库是比MFC优秀的,两个库都经受了时间的考验,稳定性都很高,Bug几乎没有。

2运行效率

MFC由于其浅层封装的特点,所以运行效率是比较高的,加上vc对windows的针对性优化,整体性能是比较高的,但是如果加入第三方库就不敢保证了。

QT因为库比较庞大,封装层次较深,所以运行效率较MFC为低,但是在现在的机器配置下,C#大家都不介意了,这些会引起人们的介意吗?

3学习难度

QT的封装哲学比较明晰,和系统隔离得比较好,门槛不高;

MFC较难精通,因为深入开发之后SDK还是要了解的。

必须Qt啊,跨平台,还有鬼知道项目以后要不要跑Linux和嵌入式设备上!界面简单的话,用qml开发,可以直接移植到嵌入式设备上去,还可以把编写逻辑的程序员和界面设计师分离出来!mfc现在微软都放弃更新维护了,mfc开发界面很麻烦的,除非老项目要维护,不然不建议再用mfc做新项目了!Qt的信号与槽很赞,比mfc的回调函数好用多了!

mfc底层太复杂了,但资料多,开源代码多。

qt底层可能好点,但资料和整个开发环境肯定不如vs系列。

微软精力不在mfc上面了,而qt则要在竞争中求存活。

用什么看开发习惯,熟悉哪个用哪个。有困难找我

就是缺少这个文件,再下一个就行了。

下载方式如下:

下载地址:>

或者用360系统急救箱急救一下,急救后用它恢复一下系统文件和DLL文件,重启电脑看看能否正常,注意用急救箱必须在联网的状态下运行。

电脑出现系统文件丢失的原因有几种可能:

最容易出现这种问题的情况:杀毒软件,很多时候杀毒软件会把系统正常文件当成病毒(因为许多病毒常伪装成正常文件的样子,这样的情况下,个别不完善的病毒库,会让杀毒软件在分析到该病毒代码的时候不能正确的区分病毒与正常文件)。

其次可能的原因:病毒感染了你的电脑,导致数据丢失。

非法关机,导致数据丢失。

之前我用的是win81,里面VS2013安装,几个月没事,但突然有一天不能使用,最早出现的错误MSB6006:“clexe时”有错误的退出代码2。对于这个错误,我认为这是VS的环境问题,我尝试重新安装VS2013三次,但问题仍然存在,但我计划安装用vmware虚拟机win81 win7的,与VS2013里面(默认安装路径:C:\程序文件(x86)\微软的Visual Studio 120)
然后我突然想到:可以将虚拟机文件覆盖win81在VS2013解决这个问题太大,因为错误是C:\程序文件(x86)\ MSBuild的,所以我把一个虚拟机C:\程序文件(x86)\复制到win81的MSBuild文件夹(通过共享文件夹),然后再次打开VS2013试过了,真的可以,但是,出现了短暂的,错误MSB6006过了片刻:“CLEXE”有错误2的退出代码,和其他错误。后
,我在网上搜索了很久,一些用户说,这可能会引起clexe时没有退出,然后我下载了一个专门的进程管理器(windows系统自带的进程管理器不能找到clexe时),运行了一下,我发现,当出现错误MSB6006有:错误2“的clexe”退出代码,没有为“clexe时”节目的名称仍在运行,我会继续末端的真正使用它,但它也是一个治标不治本的办法,因为每次运行程序时不得不看到底,太麻烦了,但也有其他的错误,我解决不了。
重装系统可以解决这个问题,当然,但以后每次重新安装系统更新,并安装了很多软件,用来不得不花费大量的时间和精力,所以我决定用VS2013不是win8的1现在我装了win7和win8的(因为win81的应用程序不破)双系统,平时就用,玩像win7的游戏程序的使用win8的
量,多说,对不起,没有真正解决问题,我的水平有限,能做到的,你有什么不明白的问题,请继续

简单模拟图形时钟代码如下:graphicshVC上编译通过给TC上编译没问题VC行graphicshVC上编译通过#include"graphicsh"#include"mathh"#include"dosh"#definepi31415926#defineX(a,b,c)x=acos(bcpi/180-pi/2)+300#defineY(a,b,c)y=asin(bcpi/180-pi/2)+240#defined(a,b,c)X(a,b,c);Y(a,b,c);line(300,240,x,y)voidinit()/划时钟边框函数/{inti,l,x1,x2,y1,y2;setbkcolor(1);circle(300,240,200);circle(300,240,205);circle(300,240,5);for(i=0;i<60;i++)/划钟点上短线/{if(i%5==0)l=15;elsel=5;x1=200sin(i6pi/180)+300;y1=200cos(i6pi/180)+240;x2=(200-l)sin(i6pi/180)+300;y2=(200-l)cos(i6pi/180)+240;line(x1,y1,x2,y2);}}main(){intx,y,i,k=1;intgdriver=9,gmode=2;unsignedcharh,m,s;into,p,q;floatn;structtimet[1];structdated[1];initgraph(&gdriver,&gmode,"c:\\tc");initgraph(&gdriver,&gmode,"c:\\tc");for(i=0;i<=6;i++){settextstyle(TRIPLEX_FONT,HORIZ_DIR,i);/控制输出字符字体方向大小/cleardevice();settextjustify(1,1);/指定坐标上输出字符串/outtextxy(300,80,"12");outtextxy(300,390,"6");outtextxy(140,230,"9");outtextxy(460,230,"3");outtextxy(380,100,"1");outtextxy(220,100,"11");outtextxy(430,160,"2");outtextxy(430,310,"4");outtextxy(380,370,"5");outtextxy(220,370,"7");outtextxy(160,160,"10");outtextxy(160,310,"8");}init();setwritemode(1);/设置画线输出模式/if(k!=0){getdate(d);/获得系统日期函数/o=d[0]da_year;p=d[0]da_mon;q=d[0]da_day;gettime(t);/获得系统时间函数/h=t[0]ti_hour;m=t[0]ti_min;s=t[0]ti_sec;}setcolor(7);/设置时针颜色/n=(float)h+(float)m/60;d(150,n,30);/画出时针/setcolor(14);/设置分针颜色/d(170,m,6);/画出分针/setcolor(4);/设置秒针颜色/d(190,s,6);/画出秒针/while(!kbhit())/控制程序按下任意键退出/{while(t[0]ti_sec==s)gettime(t);gotoxy(44,18);/使光标移动指定坐标/printf("\b\b\b\b\b\b\b\b\b");/退格使表示时间字符串断变化/sound(400);/按给定频率打开PC扬声器/delay(70);/断程序执行时间70毫秒/sound(200);delay(30);nosound();/按给定频率关闭PC扬声器/setcolor(4);d(190,s,6);s=t[0]ti_sec;d(190,s,6);if(t[0]ti_min!=m){setcolor(14);d(170,m,6);m=t[0]ti_min;d(170,m,6);}if(t[0]ti_hour!=h){setcolor(7);d(150,h,30);h=t[0]ti_hour;d(150,h,30);sound(1000);delay(240);nosound();delay(140);sound(2000);delay(240);nosound();}if(s<10)/用字符形式输出时间/{if(m<10)printf("%u:0%u:0%u",h,m,s);elseprintf("%u:%u:0%u",h,m,s);}else{if(m<10)printf("%u:0%u:%u",h,m,s);elseprintf("%u:%u:%u",h,m,s);}gotoxy(34,19);/指定坐标上输出日期/printf("%d年%d月%d日",o,p,q);printf("\b\b\b\b\b\b\b\b\b");}getch();closegraph();}

如果是这个情况的话,如果电脑运行正常,就是开机启动项里某个软件损坏导致的,可以考虑关闭除了杀毒软件和输入法外,其他所有软件看看,具体方法可以网上搜搜看,如果是不能正常开机使用,就考虑用U盘启动盘,修复一下引导文件看看,不行就考虑重装系统看看

我想在窗口上做一个浮动的容器,在ASPnet中有没有这样的控件,如果用代码实现该怎么做
不可以,Frame是顶层容器,添加一个Frame到容器会抛出IllegalArgumentException

自已控件就是你先写好你的控件代码,假如你自定义了一个MyButton,然后这个MyButton类你放在comapp包里面,那么你在xml配置代码如下

<comappMyButton
android:layout_heigjt 属性/>

开源阅读不太好开发,有一定的难度性,你可以购买一些这样那样的开源软件的教程或者图书(包括电子书)去学习,但一定不要以这些学习材料为主要的学习这些开源软件的方法和途径,有机会的话,或者说你想要学习的开源软件所使用的开发语言正好是你熟悉或者使用的编程语言,那么你应该尽量多去以阅读这些开源项目的源码本身为主。举个例子,如果你是 C/C++ 后端开发者,那么像 Redis、Nginx(它们都是使用 C 编写的)这样的开源项目的源码你应该认真的去研读一下;如果你是做 Windows C/C++ 客户端或者一名 QT 客户端开发人员,那么像 MFC、DUILIB、金山卫士等源码,你可以拿来读一读;如果你是 Java 程序员,Netty、Spring 等源码是你进阶路上必须迈过去的一关。为什么建议以阅读相关源码为主,而不是其他相关教程呢?首先,任何其他相关教程介绍的内容都是基于这个软件的源码实现创作出来的,虽然能帮助你快速理解一些东西,但是不同的教程作者在阅读同样一份代码时的注意点和侧重点不一样,加上如果作者在某些地方有理解偏差的,这种偏差会被引入你所学习的教程或者图书里面,也就是说,你学习的这些东西其实不是第一手的,而是经过别人加工或者理解意译过的,在这个过程中如果别人理解有偏差,那么你或多或少的会受一点影响。所以,为了"不受制于人”,亲自去阅读一些源码是非常有必要的。以上是开源阅读开发的部分内容,具体还是得自己去验证和设计祝您生活愉快,谢谢提问

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13397193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存