整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Qt和MFC的比较

Qt和MFC的比较

在当今基于C++的图形界面开发领域,能与Qt相抗衡的只有MFC。MFC是微软公司的基础类库,自然得天独厚,比如开发深层次的Windows应用远超Qt,但Qt也有杀手锏,那就是跨平台。这两点大家一目了然,下面我们再来比较一下它们的其他特点。

开发速度就整体而言,MFC可能会快捷一些,因为Windows平台的开发工具大多很智能,因为立足于Windows的开发人群很广,从菜鸟到专业人士(开发人员一多,技术参考就多,周围可以咨询问题的人就多)。相比较而言,Qt基于Linux,可用的开发工具不多,而且这些工具大都比较专业,多是第三方的产品,加上这些工具的集成度不高,支持的第三方库也没有支持MFC的第三方库多,因而从这一点看MFC略胜一筹。不过,Qt自从被诺基亚公司收购后,官方发布了跨平台集成开发环境Qt Creator,之后的走向就不好说。总体感觉就是Qt Creator和VS差距比较大,还需要改进。

从库本身来说,Qt集成的功能比MFC庞大,而且使用的封装技术(信号/槽)倍受赞许,比如Qt Script为Qt提供了嵌入式脚本,Qt界面库支持CSS,所以Qt构建出来的界面比MFC要好,且实现过程也比较容易。为了降低使用Windows SDK开发的难度以及提高使用Windows SDK开发的效率,MFC采用的是浅层封装(最新的2008 sp1加入了BCG的高级界面库,可能有所改善)Windows SDK。这个方面相比而言,Qt库比MFC优秀。不过,这两个库久经考验,稳定性都很高,几乎没有什么Bug。

  1. 跨平台支持:

Qt:Qt 是一个跨平台的应用程序开发框架,可以在多个操作系统上运行,包括 Windows、macOS、Linux 等。

MFC:MFC(Microsoft Foundation Classes)是微软提供的 Windows 平台特定的应用程序开发框架,主要用于 Windows 操作系统。

  1. GUI 设计和样式自定义:

Qt:Qt 提供了丰富的 GUI 控件库和可视化设计工具,使开发者能够轻松创建各种复杂的界面,并且可以通过 QML 和 CSS 进行灵活的样式自定义。

MFC:MFC 也提供了一系列的 GUI 控件,但相对于 Qt 来说,MFC 的界面设计和样式自定义相对较为传统和受限。

  1. 开发语言:

Qt:Qt 基于 C++,提供了许多面向对象的类和 API,同时还支持其他编程语言,如 Python。

MFC:MFC 基于 C++,使用了面向对象的开发模式,但相比 Qt,MFC 的类库和 API 相对较少。

  1. 功能扩展和第三方库:

Qt:Qt 提供了丰富的功能模块和扩展库,包括网络、数据库、图形渲染、多媒体等。此外,Qt 社区中也有大量的第三方库和插件可供使用。

MFC:MFC 提供了一些基本的功能模块,但相比 Qt,其功能扩展和第三方库的选择相对较少。

  1. 学习曲线和开发效率:

Qt:Qt 的学习曲线相对较陡峭,特别是对于初学者来说。但一旦掌握了 Qt 的基本概念和技巧,使用 Qt 进行开发可以极大地提高开发效率。

MFC:MFC 的学习曲线相对较平缓,特别是对于熟悉 C++ 的开发者来说。MFC 的开发与传统的 Windows 编程更为接近,但在某些复杂的任务上可能需要更多的手动编码。

总的来说,Qt 是一个功能强大、跨平台的应用程序开发框架,适用于多种场景和项目类型。而 MFC 更适合在 Windows 平台上进行传统的 Windows 应用程序开发。选择使用哪个工具取决于你的需求、技术背景和项目要求。

爱的BCGSoft用户,我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFC v33.0正式发布!此版本包括对每个显示器 DPI 感知的支持、改进的信息框和桌面警报控件、主题编辑框气球工具提示和其他新功能和改进。

BCGControlBar Professional Edition for MFC官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网

网格和报表控件

1. CBCGPGridRow 和 CBCGPGridItem:当 DPI 更改或窗口移动到具有不同 DPI 的另一个监视器时,将调用新的虚拟方法 OnDPIChanged。 如果您需要重新计算自定义维度或重新加载 DPI 特定资源,请覆盖此方法。

2. 新标志 ExportOptions::EF_IncludeRowHeader 允许导出最左侧列(行标题)的内容,此标志与方法 CBCGPGridCtrl::ExportToHTML、CBCGPGridCtrl::ExportRangeToText、CBCGPGridCtrl::ExportRangeToHTML 和 CBCGPGridCtrl::ExportToCSV 一起使用。

3. 改进了CBCGPGridRow中的MSAA支持。

4. CBCGPGridCtrl:一个新方法 IsGridItemBordersEnabled 告诉谁负责绘制网格项边框(网格或网格项)。

桌面警报窗口

1. 实现桌面警报标题(见截图)

  • 向 CBCGPPopupWndParams 结构添加了新成员 m_strTitle。
  • CBCGPPopupWindowColors 有一个新成员 clrTitle - 指定标题前景色。

2. 实现了在所有者窗口更改(例如,移动或调整大小)时关闭弹出窗口的功能,调用新方法 CBCGPPopupWindow::SetCloseOnOwnerChange 以启用此功能。

3. 添加了工具提示风格的可视化主题(BCGPPopupWindowTheme::BCGPPopupWindowTheme_VisualManagerToolTip)。

Controls

1. CBCGPInfoBoxRenderer 有以下添加和改进:

  • 类构造函数有一个新的可选参数 CWnd* - 指向显示信息框的窗口的指针,指定此窗口以在多 DPI 环境中更正绘图很重要。
  • 添加了新成员 m_bAlwaysUnderlineLink:如果您希望仅在链接悬停时为链接添加下划线,请将其设置为 FALSE。
  • 新成员 m_bVisualThemeColors 指定是否使用当前选定的可视化主题呈现控件。

2. CBCGPEdit:添加了对主题(基于可视化管理器)气球工具提示的支持(在接收到 EM_SHOWBALLOONTIP 消息时出现,请参见屏幕截图)。 如果您希望关闭此功能并显示默认工具提示,请将新的全局标志 globalData.m_bThemedBalloonTips 设置为 FALSE。

3. CBCGPStatic:添加了一个新属性 m_bDPIAwareIcon。 如果该成员为 TRUE,则更改 DPI 值后图标将正确绘制(更改 DPI 后必须调用 SizeToContent 方法)。

CGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。

BCGControlBar专业版和BCGSuite for MFC v33.3已正式发布了,该版本包含了增强的Ribbon自定义、新的日期/时间数字指示器、带有文本对齐的组控件、多行支持以及其他一些新功能和改进。最新版点击下方获取:

BCGControlBar Professional Edition for MFC官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网

编辑控件

1. 实现了使用单个输入字符在所选文本周围切换为注释的功能(例如在c++语言中的'/'),启用此功能的最简单方法是向XML设置文件添加一个新标记CommentString,或者调用一个新方法CBCGPEditCtrl::EnableCommentingSelectedText,此外CBCGPEditCtrl类增加了以下新方法:

  • IsCommentingSelectedTextEnabled
  • CommentSelectedText
  • CommentText
  • GetCommentChars

2. 增加了一个新的方法HasSelection:这个方法告知一些文本是否被选中。

其他增强

1. Stdafx.cpp/.h文件重命名为BCGPStdAfx.cpp/.h(以避免在用户应用程序中引用不正确的预编译头文件)。

2. CBCGPBaseVisualObject:当父窗口接收WM_SETTINGCHANGE消息时,一个新的虚拟方法OnSystemSettingChange被调用。

3. CBCGPPropertyManager:方法LoadValuesFromRegistry有一个新的可选参数'bNotifyChanges'(默认为FALSE)。如果此参数为TRUE,并且从注册表加载的属性值不是默认值,则此属性将调用OnPropertyChanged。

4. CBCGPLightBoxDialogOptions有一个新成员m_bDisableParentWindow(默认值是FALSE),当此属性为TRUE时,整个父帧被禁用并显示为灰色,因此用户不能调整大小或移动它。

5. 一个新的助手类CBCGPInfoBoxView简化了创建带有嵌入式信息框的cview派生类,如果开发人员需要创建一个简单的信息视图,请从CBCGPInfoBoxView派生您的类,并在类构造函数中调用SetInfoText。

6. 改进了几个控件的打印:

  • Calendar (Planner):打印内容与查看内容相同。
  • 网格和编辑控件:改进了用于打印的字体和布局。

7. CBCGPGridCtrl:添加了以下新的访问方法(用于获取/更改默认的导出标志)。

  • SetDefaultExportToHtmlFlags
  • GetDefaultExportToHtmlFlags
  • SetDefaultExportToCsvFlags
  • GetDefaultExportToCsvFlags