在WPF/C#和Qt/C++之间进行选择

kum*_*rsh 42 c# c++ wpf user-interface qt

我和我的团队正在开发一个应用程序,它涉及用C++编写的后端,并涉及使用OpenCV,MIL等库.

现在,我们需要开发一个GUI来与该程序进行交互,以便GUI显示图像,用户可以与图像交互并注释/标记图像,然后运行用C++编写的图像处理算法来显示结果.

对于GUI,我很难在WPF和Qt之间做出选择我个人认为WPF比Qt更容易,而且比Qt更强大我明白WPF不能移植到Linux,但我并不担心这个太多...而且,WPF使用DirectX技术,我可能必须使用它来在稍后阶段生成一些3-D可视化.

请帮我解决以下几点:

  1. 我可以直接使用C++连接WPF(而不是使用Visual C#??)
  2. 如果(第1点)是不可能的,那么考虑一下:C++中的代码将会很大,并且涉及一些库,所以我可以使用C#来调用C++函数投入学习Qt的时间是否比使我学习Qt要少非托管非OO C++代码与WPF一起使用?

(我有一种下沉的感觉,我必须编写太多的代码来连接C++与WPF,这可能等于重写实际程序本身的一半...... :-()

Liz*_*Liz 32

我已经将Qt与C++和WPF一起使用了.我更喜欢WPF作为用户界面框架.Qt也不错,尤其是4.0之后.我甚至不会触及早期版本的Qt.

正如其他人在评论中所说,WPF有更好的文档记录,在线社区更大.如果您正在查看样式应用程序WPF肯定是要走的路.Qt的声明式语言是新的,沿着这条道路迈出了一大步,但因为它是如此新颖,它往往有点儿马车.WPF已经存在更长时间,并且功能更加成熟和丰富.

但是,我认为您的案例中的真正问题是您拥有的c ++代码库.

WPF将需要C++/CLI层(托管C++)才能与您的c ++代码库正确连接.这听起来很复杂,确实需要一点点工作,但它并不像听起来那么疯狂.此外还有大量关于此的文档.我个人会远离PInvoke.

Qt稍微容易一点,因为它是基于c ++的,但你可以在c ++本机类型和内部使用的Qt类型(如QString,QList等)之间进行一些翻译.

另一件需要考虑的事情是您希望UI的外观和感觉.例如,如果你正在考虑一个漂亮的Ribbon(office 2008,2010)外观,那么你将无法通过Qt得到这个.此外,还有大量的第三方WPF控件,但我没有为Qt找到很多.在某些情况下,购买一组很好的控件以补充Microsoft默认提供的控件非常方便.

在过去的几年里,我们没有要求拥有Linux UI,我们一直在使用WPF,无论代码库如何.我们还没有后悔.

但是,我还建议第三种选择.Code-jock是一个基于MFC的UI框架,我相信.它是基于c ++和ActiveX的.它变得非常复杂.检查它在这里.

编辑:自从我第一次看到它以来,QML已经走过了漫长的道路.我没有时间深入研究它,但从我听到它提供了一些非常有趣的功能.值得一看.

此外,正如一些评论所指出的那样,还有更多类似Office的控件,如功能区,以及添加到Qt工具集的一些图表和图形控件.这些确实使Qt成为一个有趣的前景.

我会支持我之前说过的一些事情,作为一名程序员,我发现用WPF制作用户界面要容易得多,而且我对我的结果比用Qt编写的任何东西都更令我满意.

  • 你无法实现Ribbon?:http://qt-prop.org/content/show.php/QtitanRibbon+Microsoft%27s+ribbon+for+Qt?content=138674.另外,对于接口,我建议您使用QML和Qt,他们甚至可以直接从Photoshop/GIMP导入一个很好的插件,文章:http://labs.qt.nokia.com/2010/10/19/exporting-qml-来自-photoshop-and-gimp /和视频演示:http://www.youtube.com/watch?v = C-d4iNMyFrI&feature = related (3认同)
  • @nosbor WPF 并没有消亡。NET Framework 4.7 于 2017 年 4 月发布,其中包含许多 WPF 添加和增强功能。WPF 是 Visual Studio 和 Windows 部分的基础。它正在积极开发和成熟。到今年年底我们还将获得 XAML 标准,这非常令人兴奋!Microsoft 在 Build 2017 上非常强调他们对各种 NET 应用程序和框架的承诺,而这正是 NET 标准的目的。Xamarin、WPF、UWP - WPF 技术的定位从未如此良好。坦白说,这太棒了,我喜欢它,以及正在发生的事情。 (2认同)

Muh*_*ser 26

如果是C++,请坚持使用Qt.项目的3D部分可以由Qt的OpenGL小部件处理.选择WPF路径将迫使你在C#或VB.net中做一些部分(总是不好的做法).使用WPF与C++没有太大的好处.此外,您的其余代码是C/C++.适合您的需求.OpenCV,MIL等更容易与Qt集成,而不是使用WPF进行P/Invoke调用(由于.Net编组也会导致延迟).


Dyp*_*ppl 10

如果你已经有一个很大的C++代码库,我会说你应该坚持使用Qt.WPF并不像他们所说的那样令人敬畏,也不像开发那么容易.C++和Qt是一个着名的团队,普通的C++(不是.NET)与WPF不是.

  • 实际上我已尝试过WPF和Qt,对我来说,WPF比Qt更容易开发...感谢您的评论...... (5认同)
  • @Harsh:当您尝试结合使用推荐的实践(例如纯MVVM)与使用框架的WPF部分相结合时,这会变得更加困难,该框架仍需要大量修复,并且缺少很多您认为应该存在的内容。 (2认同)