Qt/Win and API Layering vs. GUI emulation
Michael O'Keeffe <[email protected]> Sun, 4 Sep 2005 23:38:54 -0500
| Newsgroups | gmane.comp.kde.devel.cygwin |
|---|---|
| Message-ID | <[email protected]> |
I see the following on the Qt/Win web site: "The Qt3/Windows Free Edition is a native win32 port of the gpl´ed qt(r)/x11 sources. It use native win32 api and does not require cygwin." And this from the TrollTech site: " Qt/Windows uses the native Windows API and does not require any special additional libraries." According to Matthias Dalheimer's Programming with Qt book, Qt is a GUI-emulation toolkit. "GUI-emulating toolkits don't use any native-toolkit calls at all. Instead they use the drawing or graphics primitives of the respective platforms. Each widget is drawn inside the emulating toolkit." I believe I read the same in the TrollTech book, C++ GUI Programming with Qt. On the other hand, API layering is where the calls are mapped to the native API: "The wxWindows methods map to Win32 API calls on Windows and to either Motif or Xt API calls on Unix (as far as I know, no version exists for the MacOS X)." Is this still correct? From the web sites, it seems to me Qt/Win uses API Layering. I'm familiar with the Java AWT, Swing and SWT, is this is how SWT works. SWT is the Software Widget Toolkit used by the Eclipse project (http://www.eclipse.org)? See the links below for additional detail, but essentially SWT uses JNI (Java Native Interface) to make Win32 calls from Java, so that if native widgets are available they can be used (else they are emulated). The API is the same, whether Win32 or Motif for example, however the Java/JNI code would be different for each platform, so the app's code is portable, however the widget code isn't. This is to be compared with the Swing, where the widgets are emulated (GUI Emulation I think), so that no matter what platform you are running on, the app will have a "swing-ish" look and feel. Further you can do interesting things with Themes, like Linux perhaps, i.e. you can have a Mac theme on a Windows OS. But as I saw explained on a Java post somewhere, this is like the town facades in the movies of the old west, underneath is the same implementation. AWT (Abstract Window Toolkit) which preceded Swing and SWT, uses API layering, so if the widget was not available, it was not implemented To conclude, is this information outdated, and Qt/Win and Qt/Win Free use API layering? Or do they use GUI emulation? Or some sort of hybrid? -Mike Simple explanation of how SWT works vs. Swing and AWT http://www-128.ibm.com/developerworks/java/library/j-nativegui/ Intro to SWT http://www.eclipse.org/articles/Article-SWT-Design-1/SWT-Design-1.html Comparison: Eclipse (SWT app) vs. Net Beans (Swing) on Windows Vista: http://weblogs.java.net/blog/chet/archive/2005/08/mustang_swing_a.html