A public forum for discussing the design of software, from the user interface to the code architecture. Now closed.
Hi all, I'm a Uni student with a fair bit of linux/unix programming experience most of my knowledge is with C mainly kernel and device type stuff, I've dabled in Perl as well for some scripts I needed. I also know some Haskell from uni classes, which is pretty useless I think.
I've had no experience when it comes to writting programs with a gui. As an exercise to teach myself some gui skills, I'd like to write a simple app that reads data from xml files and displays it in a window. I'd like the user to be able to edit the info once it appears on the screen.
I'm wondering whats the best langauge/tool kit to use is. I don't really care about power and advanced features, at this stage I'd like it to be as simple and user friendly as possible. I'd also like the application to be cross platform if possible but its not really required. Oh and I'd prefer if the toolkit is free / open source.
I've had a play around with a few of the development tools that shipped with my linux Distro and so far QT designer seems very nice, I don't really know C++ but I'm prepared to learn it. Before I commit myself to using it I thought I'd see if anyone else had any suggestions. Some of my friends have reccomended Java to me and It's a langauge I've been meaning to learn. How does Java compare to C++ for gUI development?
Is there any others to consider like Wx or GTK+ (I had a look at glade and didn't really like it).
GUI has been losing popularity to Web for a while. It means that with fewer people interested in GUI, you don't have many stable and future proof solutions to choose from.
Myself, I prefer GTK, because it has a very active development, is LGPL, and as I use mostly Linux with a GTK+ based desktop, it generally has a good feel. Also, I have tested GTK on Windows and I could stand, if it wasn't for other shortcomings of Windows.
GTK is different, because it's one of the few popular GUI toolkits that use plenty of C, instead of plenty of C++. Luckily, I don't have to interface with C directly, because I use the Ruby bindings, and I also have created my own abstractions based on them. This investment has paid off, because I use this for my own tools, like Ruby Editor, Database Administrator, and a handful of other tools -- it's very cheap for me to create GUI programs nowadays, even though I don't use GUI designers.
Like the Ruby support, GTK can be accessed from many languages, including Python, which is a popular choice as well.
With Ruby you can use the Fox-Toolkit which is cross-platform and is a very good choice for Windows programs, because it has a Windows look and feel to it.
Ruby has support for QT and Tk as well, but Ruby does not have a very good support for wxWidgets, and if you want to use wxWidgets maybe you could look into Python, because they have a good one.
Glade is important if you want some kind of "standard" program. Personally, I don't care about these "standard" things. Mono has an alternative to Glade called Stetic which has been integrated in the Mono-Develop IDE, but it's very recent and may be incomplete (you could try to use trunk of their SVN code though).
Finally, Java has --the blessed by Sun,-- Swing, and the alternative SWT, which is not as well supported due to Sun not liking it. SWT should look great on Windows, even though it's a large library. But you could seriously enjoy SWT because it has been debugged through all these years of supporting Eclipse. SWT is not as good on Linux, but it should work. Java also has support for Gnome/GTK.
Mono has some basic support for Windows.Forms, also, but maybe you should use SVN trunk to enjoy it completely.
After all that, you have the Web, which is more bullet proof. :-)
Wednesday, May 24, 2006
I've had good luck with wxWidgets and C++ myself. Given that your background is C++ that might be a good choice. As some people have pointed out wxWidgets provides a very solid base widget set, but they're fairly skimpy on move complex widgets. That said, I found it very easy to extend a wxWidget class to make it do what I wanted.
If you're comfortable with using Qt though it certainly wouldn't be a bad road to go down. The Qt apps that I've seen all look very nice.
Unless you're explicitly looking to branch out away from C++ I don't recommend looking at all of the Python/Perl/Ruby/Flavor++ language bindings. They're great for the people who work in those languages, but if you're a C++ programmer you'll be happier staying with the native tongue shared by both you and your widget library.
Wednesday, May 24, 2006
For what you are trying to accomplish, Java is the best solution in the sense that it's easy to install (all the libraries are provided in the same package), runs on multiple operating systems with minor differences between them, easy to compile, and very well documented. As such, it's a great way to learn the basics of GUI development.
There are a lot of things Java doesn't do well as demonstrated by the plethora of options given above. I will agree with the sentiment that you shouldn't expect to create the next great game engine in Java, but once you're able to do build basic programs like calculators, you'll be in a much better position to decide which of these toolkits serves your needs.
Wednesday, May 24, 2006
FreePascal with the Lazarus IDE is something you might want to check out. It's basically a cross-platform (mini?)clone of Delphi. Right now its GUI framework is a wrapper over GTK+, but it's abstracted to level you never have to khow what the actual graphics API is.
Look for GraphApp. It's C and simple.
Thursday, May 25, 2006
Having moved from C++ to Java and written GUIs in each, I'd say my experience is that Java is typically easier to develop GUIs in. However, it depends on how you want to develop your GUI - using a WYSIWYG GUI generator tool or hand-coding the GUI?
If the former, I'm sure there are excellent drag-drop WYSIWYG GUI generators for C++, although Java has some of the best I've yet seen, e.g. Netbean's Matisse (now a plug-in for Eclipse). With WYSIWYG GUI tools, you have to be aware of the output format (binary, XML, high-level code, etc), how it integrates with the application, and how maintainable it will be - what will you do if the tool is no longer supported or available?
If the latter (hand-coding), I'd pick Java every time. Although the current Swing layout components are a bit clumsy and awkward, there is an ever increasing selection of open-source layout solutions, and alternative component libraries.
I have used Delphi, C++ Builder, VB, .NET and Java SWT. From your requirements the best bet is probably Java with SWT (or Swing - which I have little experience). You can download Eclipse IDE (3.2 is almost out) and then download SWT. I have found the the free VE (visual editor) plugin works reasonably well (but not as good as M$ or Delphi). It has all the useful features, runs well, and is cross platform. As a Delphi/.NET GUI person, I found SWT good enough for simple+ intermediate GUI work.
The biggest issue you will have is trying to master GUI development and OO at the same time, but it will be worth it as the concepts are common across all GUI platforms and will make learning next GUI tech nology easier (unless everything is converted into HTML before then!).
Alternative option: Java 1.6 (which is in beta) has improved swing support, but AFAIK, no IDE yet supports 1.6 (your best bet is Eclipse 3.2 or IntelliJ, which is not free!)
Tuesday, June 06, 2006
This topic is archived. No further replies will be accepted.Other recent topics
Powered by FogBugz