Well, I'm basically a newbie on the topic, but since I stand where you stand, I will tell you why I went with Qt.
If you want GUI, you should first ask yourself, do you want it to be cross-platform or OS specific. If you want OS specific GUI, and the OS is Windows, then MS technologies are ok. However, learning a GUI api is not fun, especially when proprietary vendors tend to change their interface over night. I used to study Win32, which was very uncomfortable API, and then for some time COM for certain purposes, and finally MS invented .Net. So, if you don't want to learn OS specific stuff, which will evolve under your feet, then you need some kind of mediator - a cross-platform mediator. I'm not saying that learning the ever changing MS technologies is a bad thing, but for personal development I wouldn't recommend it. .Net is not cross-platform in practice, although as I said, it is very productive.
Then you are left with either using something like Java, or C++ frameworks, or Python, etc. For Python, I can not help you much, except to tell you that it looks like a (relatively) clean language, but unfortunately produces slow programs. 10x slower at times compared to C/C++. If your program is not processing intensive you can consider it. You should probably learn it anyways, since it is very pervasive. I've been planning on taking this step for some time.
Java is as cross-platform as they get. It is also as fast as a managed language gets and garbage collection is really nice for GUI development, since manual memory management is simply not justified for such trivia. The language is fast all right, but the memory consumption is much higher and the GUI is very slow. Also, it doesn't look native. I believe there are changes happening with Java as we speak, but the memory consumption will remain a problem. I have used Eclipse for a while in the past, which is written in Java, also a version control system written in Java, and a mail client written in Java. It simply suffocated the hardware that my employer provided, and although not top of the line, it was a decent box. What I am saying is, Java is a bit of resource hog and has a somewhat flickering GUI.
So, there are different C++ frameworks, wxWidgets, Qt, GTK+, etc. Almost all support comparable features. I know that both Qt and wxWidgets use the platform look-and-feel, which was one of my criteria. But Qt IMHO is simply more evolved as a framework. It has a very convenient programming model. It can actually improve the quality of your coding practice. The only downside I see is that it uses a meta-compiler in front of your C++ compiler and this is not entirely desirable in some situations. Qt supports stuff like networking, databases, etc, but wxWidgets also extends beyound GUI. There are not many books for Qt, but the ones available from bookstores are of above average quality. And there is a nice official IDE available, although some people might say that's a downside.
Now, no matter what you choose, GUI is always sluggish and resource hog these days, so Java is something to consider. But C++ is a low-level language, which gives you a lot of possibilities to develop hardware specific stuff without using Java Native Interface to connect between C++ and Java. The lack of garbage collection and debugging features is pain in my opinion.
For the serial port. Qt does not offer anything out of the box, but you can use any library you choose. There seem to be few cross-platform (if you go that way), but I found those:
http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/overview/serial_ports.html
http://www.teuniz.net/RS-232/
Please, make note that I am studying Qt as we speak, so my information may be premature. Also, my comparison is based on info from the web and browsing example code of various frameworks and platforms and using applications written with those.
Regards