views:

353

answers:

8

Things to take into consideration: - easy to use - fast - use underlying OS as much as feasable (like wxWidgets for UI)

Ones I am leaning towards are wxWidgets for UI and Boost for networking - how do they compare to others?

+12  A: 

I hear good things about qt for GUI

Qt is a cross-platform application and UI framework. Using Qt, you can write web-enabled applications once and deploy them across desktop, mobile and embedded operating systems without rewriting the source code

Tom
I would point out that QT is not c++. The addition of moc means it is a new language (an extension to c++). That said, it _is_ a nice graphics lib.
KitsuneYMG
QT is very robust but licensing may be an issue... Stick to wxWidgets.
George Edison
QT is a good answer, but is previously mentioned, it's not C++ and for the UI it defines it's own look (it was part of my question to be as close to the OS as possible). Thanks for the suggestion though.
Ivan Peevski
QT UI uses native OS graphics where possible. You can write custom widgets in any case. And although it's not "technically" C++, in practice, you're writing C++. Certainly in the parts of your app that don't touch QT.
James D
Two reasons why I didn't pick that as an answer - as mentioned above, it's not C++ and in my experience isn't using OS UI (it defines its own in a lot of cases). It is also a bit of a behemoth, compared to wxWidgets I think. I was interested to find if there were other libraries like wxWidgets (perhaps better ones) - not interested in bigger libraries like QT, GTK, etc. For what I was after, they are outside the scope of what I needed. Thanks for your answer anyway.
Ivan Peevski
A: 

Both Qt or wxWidgets can do networking even if it's not their first goal.

For more network centric libraries, apart from boost::asio, you can check ACE (Adaptative Communication Environment ) or POCO

Comparisons between these libraries have already been discussed on stackoverflow.

f4
Yes... actually if you are doing HTTP/FTP stuff, stay away from the wxWidgets classes for this. Use libcurl. It's cross-platform too.
George Edison
I think the documentation of boost::asio is extremely poor. I would stick with qt and it's networking module. The Qt documentations is the best I ever read.
cake
A: 

boost::asio seems to be very well written, and has a very clean API -- I am still trying to learn how well it is for shared-nothing multithreaded TCP/IP.

Your other choices might be Poco, or ACE. Poco's socket abstraction is quite naive --i.e., it only allows the Poco way of doing things. I've never heard anything good about ACE.

edit: Hmm, I'm re-examining ACE and its making more sense to me now (after having written a few networking apps) -- it might be suitable for my needs compared to ASIO. However, it is more than likely overkill for you. If my peers find out about this, I will be shunned till the end of time.

Hassan Syed
+2  A: 

I've had good look with wxWidgets on the front end and boost::asio on the network end.

wxWidgets does have network classes built in, but you hit the wall quickly on them, and there's one or two big limitations. If you want to stay in the wx world, there's a package called wxCurl which is a fine package (I used it in the early days) that wraps libCurl with some wxWidgets idomatic C++.

In a previous project of mine (a network/file transfer heavy project) we ended up going with boost::asio, which had the advantage of not being all that hard of an API, easier-seeming to set up that libCRUL (although that may have gotten better, that was been several years now), and gives us a very generic networking core (boost can compile anywhere, even command line apps)

RyanWilcox
NO! Don't use wxCurl! Use libcurl directly. Take my advice: wxCurl has its share of bugs.
George Edison
+2  A: 

For GUI I would strongly recommend using Qt. It is very powerful GUI framework that requires writing very few lines of code. It has very nice and easy to use model of signals and slots.

wxWidgets IMHO too modeled after MFC which has very bad model.

Networking: I would suggest go for Boost.Asio very powerful and nice. However if you want to integrate networking to GUI main loop you may try to use Qt classes for that, however I have no experience with them.

Artyom
A: 

We have had good success using wxWidgets with boost::asio, both recommended for desktop-server development.

dtw
A: 

For GUI, I can recommend QT

For Networking ACE (Adaptive Communication Environment) or boost::asio.

baris_a
A: 

I've used XVT historically, which has been used commercially by thousands of companies.

Tony Lambert