MFC vs .NET vs Qt? (Maybe C# even?) [long post]
I'll preface this by saying I'm 25 years old, and I've been programming since I was about 12 in various scripting and programming languages, though primarily in C. Up until recently, this was all console programming. I wouldn't call myself an expert on C because all of my knowledge is self-taught and specific to my needs, but I would call myself an expert on being able to visualize how something could be coded. Brain pseudo-code, I suppose.
Anyways, I started working in a new industry a bit over a year ago. Slowly I came to the idea that the software we use could work better. There are actually several competing programs, and I'm familiar with two of the major ones. About 8 months ago I started working with VS6 and MFC and I've put together a preliminary, dialog-based application that reduces the time to do some of the work I do by as much as 25-50%, as well as significantly increasing its accuracy. In fact, it even interfaces with the two aforementioned programs by way of copying the data on to the clipboard in a manner that these programs' spreadsheets will accept.
Thing is.. I have much higher aspirations for my program than just being a secondary device. Right now, the interface, while usable, is not something that would be considered industrial-strength. I've attempted to switch over to an SDI interface, and I've run into a whole new slew of issues of how to get objects to correctly interact with each other. Simply put, it made me question the logic behind MFC.
So I did some research on MFC and how it is basically falling out of favor in light of the newer paradigms such as .NET and even Qt. Since I'm at the point where I'm basically re-writing the program anyway, I've started to explore these options.
The pros of Qt seem to be very good. However, one thing I seriously have to avoid is reinventing the wheel because I am a one man team on this project at this point, and free code that is not GPL'd is significantly harder to come by for Qt. But, Qt looks like it would make a lot more sense to me with my programming history than MFC does.
I know very little about .NET, but from the bits that I've read, it may not have as much functionality built-in as MFC does. Qt has quite a bit of functionality already included. However, MFC has the recently-released Ultimate Toolbox/Grid/TCP/IP all of which has many useful classes that will significantly reduce my time to create a workable (and downright pretty) interface. I'm not sure how much of that stuff is covered in Qt.
Another issue is that I need a relatively powerful spreadsheet. It doesn't need formulas, and it doesn't need to be on an Excel-level, but it has to be very functional. I can only find one for Qt which is called QicsTable, and they describe it as aimed for super industrial-strength applications, and I'd imagine the price that goes with it is similar. Qt does have a table widget, although I'm not sure if it's powerful enough out of the box, or how easy it would be to program more complex cell types. It looks simple enough but I haven't tried it yet.
Also, the user base for Qt (and therefore knowledge available, sites to learn from, etc.) is obviously limited when compared to MFC or .NET. And it seems that learning each one of these APIs is like learning an entirely new programming language. I rely heavily on the internet to provide answers to my questions, because the MSDN is not anywhere near as good as ol' Turbo C++'s help files were. This would put me at a disadvantage with Qt.
So, I need to make a decision, and soon, on how I want to proceed with this. Another, far-off consideration I have to make is that I may need to hire additional coders, and I may be limiting my selection by using Qt.
In summation--
Qt pros: Appears to fit more with my programming style; has many GUI features out-of-box; multiplatform (although my primary userbase would be Windows without a doubt, so this is not a huge consideration); has the open-source community mentality to development.
Qt cons: I would have to learn a new API; of what freely available code there is, much of it is GPL'd and could not be used in a commercial application; less help and resources are available compared to MFC or .NET.
MFC pros: I've been learning it for some time now; many, many free to use code snippets, especially the Ultimate Toolbox/Grid.
MFC cons: It is an outdated API getting minimal support from MS; coding for it often seems like a chore to me because I have to spend hours figuring out how something that should be simple works, and the MSDN hasn't been all that helpful.
.NET pros/cons: I don't really know that much about .NET. But I can't imagine the pros would seriously outweigh the cons enough (I wouldn't be able to use any of those MFC tools, correct?) to switch.
C#: Same goes here, I just threw this wildcard out to see if someone had opinions on the subject.
Thanks for taking the time to read this; any and all comments are greatly appreciated.
Re: MFC vs .NET vs Qt? (Maybe C# even?) [long post]
I think it depends on what your goals are. What do you want to do? For instance, do you want to specialize on linux or windows programming? Qt is rather for the first. The other two are definitelly for Windows.
Now, I don't know much about Qt, except that I don't know it being widely used. Which is the opposite that I could say about MFC and .NET. Yes, MFC is an old library, and doesn't get as much attention as .NET from Microsoft. Latest version 9.0, has some improvements (with support for Vista controls, and others).
C# and C++ are not worlds apart. If you know one, you can easily learn the other. It doesn't hurt to know them both. On the contrary.
But, as I was saying, perhaps you first decide what do you want to do. Where do you see yourself in the next few years (BTW, this is not an interview question).
Re: MFC vs .NET vs Qt? (Maybe C# even?) [long post]
I'm not looking for a long-term decision on my "programming career" so to speak. I am not a professional programmer, nor do I wish to be. Now that isn't to say I'm not a good programmer, it's just that I don't do it for a living (currently anyway), and I got out of the whole compsci thing as a career a long time ago.
What I am looking for is the quickest route to designing a full-fledged application in my spare time. And by quickest, I mean I don't want to have to spend hundreds of hours learning strange syntax a la MFC, nor do I want to spend hundreds of hours reinventing the wheel which I may have to do with Qt. And I don't have any qualms about using a managed language like C# if it makes my life a lot easier.
Problem is, I know there's no simple answer to this, and I may just have to experiment with them myself and see which works the best. Unfortunately that takes a lot of time, and working a full-time job plus other responsibilities and trying to code a very complex application is quite a daunting task. :) So I want to spend as much time as possible working on the code that makes it work (which will be fairly similar across all of these), and less time on making the interface (which is drastically different between frameworks).
I don't know if that helps clarify it or not.
Re: MFC vs .NET vs Qt? (Maybe C# even?) [long post]
Not to be critical but what syntax do you find strange of MFC?