推荐跨平台的C++ UI和网络库

4

需要考虑的事项: -易于使用 -快速 -尽可能使用底层操作系统(例如UI使用wxWidgets)

我倾向于使用wxWidgets作为用户界面和Boost用于网络 - 它们与其他工具相比如何?

8个回答

11

我听说在GUI方面,Qt很不错。

Qt是一个跨平台应用和UI框架。使用Qt,您可以编写一次具有Web功能的应用程序,并在桌面、移动和嵌入式操作系统上部署它们,而无需重新编写源代码。


我要指出的是 QT 不是 C++ 。添加 moc 意味着它是一种新语言(C++ 的扩展)。话虽如此,它确实是一个很好的图形库。 - KitsuneYMG
QT非常强大,但许可证可能是一个问题...建议使用wxWidgets。 - Nathan Osman
QT是一个不错的选择,但正如先前提到的那样,它不是C++,并且对于UI的定义也有自己的外观(而我的问题是尽可能接近操作系统)。谢谢你的建议。 - Ivan Peevski
1
QT UI 尽可能使用本地操作系统图形。您可以在任何情况下编写自定义小部件。虽然它在技术上不是 C++,但实际上,您正在编写 C++。当然,在不涉及 QT 的应用程序部分中。 - user2189331
我没有选择那个答案的两个原因 - 如上所述,它不是C++,而且在我的经验中也没有使用操作系统UI(在许多情况下它定义了自己的UI)。与wxWidgets相比,它也有点庞大。我很想知道是否有其他像wxWidgets这样的库(也许更好的库) - 不感兴趣的是像QT、GTK等更大的库。对于我所需要的东西来说,它们超出了我的需求范围。无论如何,感谢你的回答。 - Ivan Peevski

3
我在前端使用wxWidgets,在网络端使用boost::asio,效果很好。
wxWidgets内置了网络类,但是它们的限制很大,使用起来很快就会遇到瓶颈。如果你想继续使用wxWidgets,有一个叫做wxCurl的包,它是一个很好的包(我在早期使用过),用一些wxWidgets习惯用法的C++封装了libCurl。
在我的一个之前的项目中(一个网络/文件传输重型项目),我们最终选择了boost::asio,它的优点是API不是很难,比起libCURL更容易设置(虽然那可能已经改善了,那是几年前的事情了),并且给我们提供了一个非常通用的网络核心(boost可以编译到任何地方,甚至命令行应用程序)。

4
不要使用wxCurl!直接使用libcurl。听我的建议:wxCurl存在一些bug。 - Nathan Osman

2

对于GUI,我强烈推荐使用Qt。它是一个非常强大的GUI框架,只需要编写很少的代码即可。它具有非常好且易于使用的信号和槽模型。

wxWidgets在我的看法中也是基于MFC的模型,而MFC的模型非常糟糕。

网络:我建议使用非常强大且好用的Boost.Asio。然而,如果你想将网络集成到GUI主循环中,你可以尝试使用Qt类来实现,但是我没有相关经验。


1

我历史上使用过XVT,这已经被成千上万家公司商业化使用。


0

关于 GUI,我可以推荐使用 QT。

对于网络编程,可以考虑使用 ACE(Adaptive Communication Environment)或 boost::asio。


0

无论是Qt还是wxWidgets,它们都可以进行网络编程,即使这不是它们的首要目标。

除了boost::asio之外,如果您需要更多面向网络的库,您可以查看ACE(Adaptative Communication Environment)或POCO

这些库之间的比较已经在stackoverflow上讨论过了


是的...如果你正在做HTTP/FTP相关的工作,就不要使用wxWidgets类。请使用libcurl。它也是跨平台的。 - Nathan Osman
我认为boost::asio的文档非常差。我会坚持使用Qt及其网络模块。Qt的文档是我读过的最好的。 - cake

0

boost::asio似乎编写得非常好,并且具有非常干净的API - 我仍在尝试学习它在共享无状态多线程 TCP/IP方面的表现。

您的其他选择可能是PocoACE。 Poco的套接字抽象相当天真 - 即,它只允许使用Poco的方式进行操作。我从未听说过关于ACE的任何好消息。

编辑: 嗯,我正在重新审视ACE,现在对我来说更有意义了(在编写了几个网络应用程序之后) - 它可能比ASIO更适合我的需求。但是,对于您来说,它很可能过度臃肿。如果我的同行发现了这一点,我将被放逐到时间的尽头。


0

我们在桌面服务器开发中,使用wxWidgets和boost::asio有很好的成功经验,两者都是推荐使用的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接