

TrollTech Releases Qt 3.0 285
Dr. Sp0ng writes: "TrollTech released Qt 3.0 today. Among the new features are platform- and database-independent data-access features, data-aware GUI widgets, a much-updated Qt Designer, and much better internationalization and font handling features. It breaks binary compatibility but keeps almost complete source compatibility with Qt 2.x. The KDE team has already begun work on KDE 3.0, which will use the new toolkit."
Binary compatibility (Score:2, Troll)
As Linux comes of age, this is an important issue. Major companies want to bring their software to Linux, but often give up when face with the nightmare of having to support the thousands of subtly different library interfaces. Working to maintain binary compatibility for new versions of software would be a good goal for Linux's advancement.
Re:Binary compatibility (Score:5, Informative)
This is an issue with C++... since most of KDE's widgets are subclasses of Qt widgets, they are very dependant on the signature of the Qt class. When the class signature changes (for example, when a function is added or removed, or a data member is added), the derived class needs to be recompiled or the linking will be all screwed up. This isn't an issue between minor revisions of the library as the API is stabilized, but with a major jump (2.3.1 -> 3.0), the API or implementation changes and things must be recompiled.
It's impressive that TrollTech (which is a great company, btw) managed to keep source compatibility so well. I'm a professional developer and we're using Qt for our app (which is currently ~20,000 lines), and exactly *1* line of code needed to be changed when we moved from 2.3.1 to the 3.0 betas.
Re:Binary compatibility (Score:2)
There are lots of other things to move onto, and
many of them are very well thought out (Eiffel,
for example). However, C++ still stands up pretty
well against the competition IMHO.
Re:Binary compatibility (Score:2, Informative)
The general problem was solved back before Unix (on Multics, to be precise), and an equivalent problem was solved for databases by the relational algebra folks.
You need a motivation to do it, though, and that motivation's not there. You need to be worried about stability without preventing innovation. A few years back a quite large part of it was solved for Suns by My Evil Twin, David J. Brown: a two-part version number for every interface in the libraries, checked at link time.
--daveRe:Binary compatibility (Score:5, Interesting)
The short answer is yes, there has been. The biggest problem has been with the C++ libraries, and g++ is finally standardising on a stable ABI.
As for Trolltech, they've always worked hard to maintain binary compatiblity (eg minor releases are binary compatible), indeed there were more
problems with binary compatiblity caused by libstdc++ issues than with Qt itself. I'm not
sure that KDE has been as stable, though this
should improve. (The move to DCOP resulted in growing pains)
To get some appreciation of how fragile binary compatibliity is, read this [trolltech.com]. Binary compatibility is fundamentally
difficult to preserve in C++, and I don't think there's any clean way around it. Fundamental
changes in interface or exposed structure
(that means anything besides opaque pointers) will break binary compatibility.
Personally, I think the fundamentals need to be
nailed down. C++ and C libraries need to preserve
binary compatiblity. On the other hand, I don't
think there's a problem with other libraries, so long as they maintain binary compatiblity across minor releases. (users could install multiple versions of the same library)
Re:Binary compatibility (Score:2)
>>>>>>>>>
Hopefully, C++ binary incompatibility should be passe. There is a standard C++ ABI for Itanium, and GCC 3.0's C++ ABI should be standard for x86. I don't know if other compiler vendors will follow suit (one hopes, but doubts), but the GCC people shouldn't change it.
Re:Binary compatibility (Score:3, Interesting)
But won't you still lose binary compatibility when you change the source sufficiently? For instance, don't most C++ compilers use offsets to refer to the various instance variables, and won't those offsets change as you add or remove variables?
I suppose for virtual methods calls you could preserve binary compatibility. Does Qt use virtual methods for everything?
And if everything was virtualized, wouldn't C++ be about as efficient as Objective C (or maybe even GCJ'd Java)? Or is there some fancy translation that C++ will do when linking, for a one-time-only cost (for each application startup, but not every call)?
I know little about the internals of C++ compiled code and linking, so I really don't know.
Re:Binary compatibility (Score:2)
Re:Binary compatibility (Score:2)
C++ doesn't have a standard ABI, and can't sensibly have one. For a start, there's nothing in the rulebook that says you must implement virtuality using v-tables. Even if you do, there is more than one possible way to implement multiple or virtual base classes, for example. Imposing a required ABI would force compromises in the efficiency of C++ code, which is against the spirit of the language.
Basically, you're using the wrong tool for the job if you try to impose an ABI on raw C++ classes. If you want binary compatibility between C++ libraries, you should be advertising a higher-level interface using something like COM or CORBA or whatever other features your platform provides. You can always build something like this on the efficient base C++ provides, but if you compromise that base by trying to impose a defined ABI, you're taking the wrong approach, IMHO.
Re:Binary compatibility (Score:2)
even if this were true why would it be relevant? QT runs on Linux, various unix varients, win32, MacOS,
Personally I think you're just another pro-M$ troll working on the current FUD campaign for your corporate masters
Re:TrollTech should make a portable Virtual Machin (Score:2)
Re:TrollTech should make a portable Virtual Machin (Score:2)
>>>>>>
Uh, no. Last time I checked, almost all Linux software distros release binaries for each supported arch. Besides, everyone (statistically) uses x86, so who cares?
Something to think about (Score:5, Insightful)
How far would Microsoft have gotten if they "broke binary compatibility" with major releases of Windows? Basically, not far at all. That's not to say that Windows has perfect backward compatibility, but I don't think it's too strong a statement to say that one of the reasons Microsoft has dominated is that they have given people an upgrade path for their old applications.
Of course, the downside to this philosophy is the incredibly crufty interfaces to a lot of the Windows functionality. But I think it's key to point out that users don't care at all about those things -- they just care that their applications work.
If the desktop dreamers ever want to see Linux on the desktop, then they need to not destroy everyone's applications if you want to upgrade. Just telling everone to "recompile your applications" is not going to fly well with the typical user.
Re:Something to think about (Score:5, Insightful)
Re:Something to think about (Score:2)
For windows users, they expect that only in rare cases will their old applications no longer work when they upgrade their computers. This has been something that Microsoft has done very well. The only thing is that they largely hide this functionality from you by making sure that you can't tell that there are full compatibility libraries for like 6 previous versions of windows installed on your machine when you install Windows Me. No, it doesn't always work perfectly, but most well-written applications will work properly in an upgraded version of windows. The difference with a Linux environment is that you can tell what library packages you have installed.
I think it's a reasonable tradeoff by having compatibility libraries. For those people who don't need all those compatibility libraries, you simply don't install them. But when you do need one or two, you have them available to you.
Re:Something to think about (Score:2)
You weren't paying attention. Your QT 2 apps will continue to work because of versioned libraries: they continue to use the QT 2 libraries, while QT 3 apps use the QT 3 libraries. This is a fundamental capability that Windows lacks. Windows tries to implement versioned interfaces and the result is a disaster because all previous versions of an interface have to be supported in a single DLL. Aside from bloating up the DLL, messing up the interfaces, this introduces a substantial risk that some vendor will ship a DLL that implements some earlier interface incorrectly, breaking other applications, or that two vendors will ship mutually incompatible DLL's. Ever seen that happen?
Re:Something to think about (Score:2)
Only thing is that "feature" fails to work with several... I guess you don't call them applications... games. For one, I am a mechwarrior fan and wanted to play Mechwarrior2:Merceanaries on my Windows 2000 running laptop, which has that "feature" as well.
When it failed, I gave it a go on one of the XP Home machines at work. It failed there as well.
I also have an easy to use CAD application that I love to play with. Unfortunately, it will never run on any version of Windows after installing the latest release of DirectX, or Windows NT after installing DirectX 3.0 on it.
Sure, I am pissed about that. It sucks, but that is life.
The download for that Compatibility feature to be added to Windows 2000 Professional was also very tiny. I recall it was less than a few megabytes. I could be wrong on its size though.
--
.sig seperator
--
Re:Something to think about (Score:2)
I would have to agree with the primary poster here. I do think that it is good to keep that backward compatibility. It is also good to see that the GNOME team is working on a backward compatibility feature...
The GNOME people aren't creating a new binary compatibility feature; they are taking advantage of the versioning support already in ld.so. That's why there are major and minor versions of all your libraries. Major versions represent API changes; minor versions do not. An application gets the major number it requests, with the highest minor number available.
This is the case with KDE as well. If you install RedHat, you will notice kde-2.x packages and kde1-compat-1.x packages. The kde1-compat packages are necessary only for backward compatibility, as the name suggests. When 3.0 gets out of beta, RedHat will likely move the current kdelibs package to kde2-compat and create new packages for KDE 3.0.
How many diferent revisions are you going to need to keep on your hard drive to be able to run that really old 1.x GNOME app when there is no GNOME 8.x version available?
It's no worse than in Microsoftland. I'm told that every new version of DirectX includes every previous version of DirectX for this reason. Other Microsoft packages have the incredibly crusty APIs Reality Master mentioned because I don't believe versioning is natively supported.
What do you do when you get rid of your 1.x legacy apps? Hunt down all the 1.x GNOME Libraries?
If you have package management, this is easy. rpm -e kde1-compat kde1-compat-devel. Done. If something requires these libraries, rpm will tell you. (This is the same for GNOME stuff. There are gtk+10 and gtk+ packages, for example.)
Re:Something to think about (Score:4, Insightful)
Wonderful, now go and tell that to the barely computer literate masses that GNOME and even KDE are being designed for. They will look at you with a "What the heck did you just say? RP..What?"
Sure, you can just blow them off and say that they need to get back to running Windows. The only thing is, they have the same trouble with Windows. It is mostly that computers, in general, are still to dificult to use for the average person.
I know what I am saying, because I have family. They are also very technically illiterate and have very little wish to really learn how to do anything technical with a computer system.
As for having prior DirectX versions in the latest release. That I doubt. I have more than a few apps and games that fail to run under newer releases of DirectX. Some that fail to run even under the "Compatibility Feature" in 2000 and XP.
These apps and games are also not very old either. About 3 years for one and about 5 years for another one of the first DirectX 2.0 Games.
--
.sig seperator
--
Re:Something to think about (Score:2)
I am not blaming DirectX (Score:2)
I just find it terribly frustrating that I am forced to buy the latest and greatest version of Caligari's TrueSpace, simply to be able to create some, nifty to me, 3D rendered objects.
I am not made of money. So, I have taken one of my old extra HDs and tossed an older version of Windows. Simply to be able to run that application and create some art. It is not a pretty fix, but it is one that does function for me.
To get back to the point. Backward compatibility is an incredibly important aspect of an Operating System and even a hardware architecture. To simply put it, for every person that has the money to buy all the latest and "greatest" whiz-bang programs, operating systems and hardware. There are at least a thousand that are unable to afford all of those whiz-bang new toys.
--
.sig seperator
--
Re:I am not blaming DirectX (Score:2)
>>>>>>>
Blame Caligari. It had no business basing a 3D moderling in DX. The state of D3D at the time the early versions of TrueSpace came out was not at the level necessary for a 3D modeler. D3D has changed entirely, and its hard to expect D3D to maintain compatibility with an app that is pushing the API to its limits anway. (I wouldn't be suprised if the early versions for TrueSpace are full of D3D workarounds.)
Re:Something to think about (Score:3, Insightful)
The same thing happens with Windows all the time. Each application's installation directory is searched for dynamic libraries first, and then the system library directories are searched second. Take a look at most Win32 applciations, they include DLL files in their own directories for just this problem.
The reason why this is so painfully visibile under UNIX systems is that by convention we usually don't keep old libraries around; package managers in particular don't like this (which is why we have lame hacks like libfoo-compat or libbar3-version). We're going to have to change how we do things a little bit, but nothing drastic needs to be done. Newer libraries will always break older ones, its unavoidable; we just need to make sure that multiple libraries can co-exist without being a headache to maintain.
Re:Something to think about (Score:2)
Recompiling the app would be great. If you still had the source laying about. Typical users will more than likely only download pre-compiled binaries for their platform. Unless I am mistaken, I am not a programmer, there is next to no possibility of getting the source out of that precompiled app.
It is also no big deal to technically inclined folks. However, it is not an easy thing to ask end-users. People that KDE and GNOME are being designed to be used by.
--
.sig seperator
--
Re:Something to think about (Score:3, Informative)
Just keep the old major version around, what's the problem with that? I have both Qt 1.x and Qt 2.x installed already and I can happily run programs linked against both.
Windows has problems with having different versions of a dll installed at once leading to what is often called dll hell, but this is not a problem with Unix.
Re:Something to think about (Score:3, Insightful)
>>>>>>>>
Great, now you'll have Qt 1.x, 2.x, AND 3.x.
UNIX is about power, elegance, and simplicity. Somewhere along the line, elegance and simplicity got lost in features and bloat.
Re:Something to think about (Score:2, Informative)
Linux distributors use a method similar to the first one - they supply both libraries. However, the binary library for Qt is just 5MB, a tiny amount - libc5 is even less, and in the long run it makes for a better API, a cleaner system, and far faster software development.
Re:Something to think about (Score:3, Informative)
Here's a simple exercise: go to the nearest Windows machine, preferably one loaded with lots of apps of various vintages, and delete all but the newest VBRUN*.DLL, MFC*.DLL, etc. Then see how many of your apps work.
When Microsoft releases new widget sets, API's, etc., older applications do not automagically use them. Having, for example, MFC 2 and MFC 3 on your system isn't any different from having Qt 2 and Qt 3 on your system.
What Microsoft did get right, is the installation procedures: have multiple libraries sitting on the same machine if necessary, but don't bother the user about it -- it's not their problem.
Re:Something to think about (Score:2)
How far would MS have gotten? Probably up to about 20 megs for a basic install instead of 100. Maybe 64 megs of RAM total instead of 128 recommended for Outlook alone?
You take on bloat when you keep providing older interfaces and older subsystems.
Re:Something to think about (Score:2)
Professional user of QT 2.12 (Score:4, Interesting)
Before I wrote software which uses QT, I wrote it using Motif. The designer that comes with QT is light-years ahead of any designer I've used for Motif. The "slot/socket" mechanism that it uses allows me to use a more abstract GUI design. And the geometry management is much nicer as well.
Just thought I'd throw those thoughts in. No, I don't work for Trolltech. Lykke til Trolltech!
Hope I said that right. It's been years.
Re:When will TT replace moc with C++ templates? (Score:2)
I think the lack of good compilers had a lot to
do with the approach, at the time. This also
had a lot to do with them re-inventing STL.
Re:When will TT replace moc with C++ templates? (Score:2)
I hear moc trashed quite often, but I've yet to hear anyone succesfully enumerate the tangible disadvantages of it. Trolltech have been able to stick to the same design for a long period of time, maintain binary compatibility over minor releases, and for the most part source compatiblity over all releases, while continuing to develop, extend and refine their toolkit. This IMO is a sign of far-sightedness.
Qt improvement BETTER than KDE improvements (Score:4, Offtopic)
However, looking at two "market" outcomes: Win32 vs. Cocoa|Carbon vs. Qt/KDE vs. Gtk, OR Win32 vs. Qt, and you clearly see which API system is more likely to allow competition on the desktop.
Java held great promise, but MS has succeeded in killing desktop Java. Without WORA, there is no real advantage to Java (the platform), but Qt has an interesting perspective.
As Qt Designer grows, it can become competitive to Visual Studio. Potentially, Qt becomes the glue that binds everything together.
If you can build a Qt application for Linux/MacOSX/Win32, or a Win32 app for Win32, there is an advantage to make the former. You still need to QA all the platforms that you support, but Qt lets you produce a product for multiple markets.
For a small company, Linux/MacOS provide a niche to target, but adding Win32 really makes this compelling. The windows market is MUCH more competitive, so being apple to primarily target niche markets but still selling to the dominate market is tempting.
Go Trolls go!
Alex
Re:Qt improvement BETTER than KDE improvements (Score:2, Informative)
In order for you to make your Qt application cross platform (linux/win32), it's gonna Cost ($$$) you an arm and a leg in license fee's for the Win32 version of Qt, which, by the way is NOT FREE.
Don't get me wrong, I love Qt, but if it costs me $2k to 3k grand to make my application cross platform, forget it! I cannot afford that. In addition, if a commercial company wants to develop software for linux, they too have to purchase a Qt license ($$$ several grand), unless they want to release their app under GPL, which means they can no longer expect to sell their app and make money.
So just because Qt is free, as in GPL, it doesn't make it more free than Gtk, which is LGPL. GTK apps face none of the problems that Qt apps incurr. A GTK app can be make open source or closed source, and can be made cross platform or uni-platform... ALL FOR FREE.
And that, folks, is the biggest difference between the two widget toolsets!
Re:Qt improvement BETTER than KDE improvements (Score:2)
Ahh, but it is. Qt/Win32 is now licensed similarly to the X11 version - free for open source stuff, expensive for commercial stuff.
No, it's not (Score:2, Informative)
They couldn't be much clearer. Or, are you saying that their Website is wrong?
Re:Qt improvement BETTER than KDE improvements (Score:3, Insightful)
Well, I don't think trolltech is targeting developers like you, or companies that can't afford a couple thousand in development costs. And as far as I know, there's no "official" win32 GTK version out there, except for this: http://www.gimp.org/~tml/gimp/win32/ [gimp.org], from which I quote the top line: "I do this work in my free time, so don't ask me for release timetables etc. If you want some new feature, you are free to suggest it, but don't hold your breath."
Is that a statement you want to build your corporate software around?
Re:Qt improvement BETTER than KDE improvements (Score:2)
WRONG, WRONG, WRONG. Completely false. See the Qt non-commercial license. I can't believe this crap is marked as "informative".
Re:Qt improvement BETTER than KDE improvements (Score:2)
"but MS has succeeded in killing desktop Java" (Score:2)
I have to beg to differ. If MS can destroy desktop Java by simply not bundling it with their OS, then desktop Java was dead already.
In fact, the wide range of systems on which network clients written in Java can operate was and is one of the main reasons why we did Ganymede in Java.. we can and do run our client on Win32, Mac OS (8, 9, and X), OS/2, Linux, FreeBSD, Solaris, HP/UX, AIX, etc., etc., etc.
In the real world, Java is still the best at client-side WORA if your demands for performance and features can be satisfied with the abilities of the Java VM and class libraries.
Who killed Java? Who will kill Qt? (Score:5, Insightful)
Sun deserves a lot of credit. If you're going to introduce a Revolutionary New Approach to Programming, you shouldn't do it with inefficient, buggy VMs, or quickie compilers that don't properly exploit garbage collection. Thos mistakes gave Java a reputation for flakiness and inefficiency it still hasn't fully dispelled.
And if you want everybody to start using Java to develop desktop apps, you don't suddenly shut down your own application development efforts [javaworld.com] before they've had a chance to bring their product to market. But of course IBM, Oracle, and all the other biggies were doing that too. Coinciding with the downfall of the Network Computer [cnet.com].
And that's what really went wrong with desktop Java. Platform independence was never enough by itself to make Java widely adopted on the desktop. You had to give people a reason to abandon their investment in Windows-based solutions. That reason, was the Java-based NC, which was supposed to lower the Cost of Ownership for big corporate computer buyers. (And, not incidentally, give these same buyers a reason to buy proprietary Sun and IBM hardware instead of commodity PCs.) Unfortunately, nobody bought the NC idea, and the main market for Java desktop apps disappeared.
Some, but not all, of this history is repeating itself with Qt and KDE. Being technically superior to Windows wasn't enough for Java, and it won't be enough for the Linux desktop.
Re:Who killed Java? Who will kill Qt? (Score:2)
Desktop Java is dead? That's news to me, since I'm currently working with plenty of big companies who are still developing desktop Java solutions.
What died was the idea that Java would be the development language of choice for all desktop apps in the future, from diarying systems to desktop publishing. And that's a good thing, IMO.
Dead Java (Score:2)
And I think that's too bad. It would have been really nice to have a universal component architecture. It would have allowed us to get away from big, bloated, brittle apps that irritate techies and frighten non-techies. Maybe Java couldn't have replaced every native app in the world, but if it had replaced just two -- Word and Excel -- the world would be a better place.
Re:Who killed Java? Who will kill Qt? (Score:2)
>>>>>
The Linux desktop hasn't even gotten to the "technically superior" phase yet. I use it everyday, but Windows has a really big edge in the technical superiority department.
Superiority: a definition (Score:2)
But that's part of the problem. On Windows, everything gets totally re-invented ever few months. As a result, nobody can keep up with all the changes, and the system as a whole is painfully complex and unpredictable.
If you care about the stability and useability of a system, then the "superior" system is usually not the more "advanced" one.
Re:Superiority: a definition (Score:2)
I care about unification, Windows wins.
>>>>>>>
I like GIMP, and I like KDevelop. I don't have infinite RAM and I like my apps to look the same. What do I do?
I care about predictability, Windows wins.
>>>>>>>
The other day, I installed AbiWord, and it didnt' like the fact that I'd removed its crappy Type1 fonts from my path. Why? Why is the app so damn bound to its fonts? I tried to install the mandrake kernel source RPM the other day, to find that it needed GCC 2.96. GCC 3.0.1 (which I have installed, in RPM form no less) works fine for the kernel, why is it so attached to its obsolete RPM? There are just too many factors in Linux that can fuck up. In theory, Linux is quite elegant and powerful, but in practice, its really not. Not as a GUI machine anyway.
I care about stability, Windows wins:
Its true. KDE-2 has crashed more often on me than Windows 2000. Of course, you'll tell me to go use Window Maker, then I'll ask where my unified GUI is, and you'll then tell me to use KDE-2.
I care about audio, Windows wins:
The Linux audio system is probably the most f*cked up thing ever. aRts on top of OSS/ALSA? WTF? Aren't software mixers archaic relics of the early 1990's? And why is aRts nifty media framework tied to a dumb software mixer? I wnat to use my SBLive! fully! ALSA is quite powerful, and quite speedy. Build a media framework on that instead.
Of course, Linux has tons of strong points. The kernel whips Windows to all hell. The VM system is (finally, thanks AA) much better, the filesystems are faster, and everything is just smoother. With the preempt and lowlat patches, BeOS finally loses the audio-latency performance crown for a general purpose OS (as long as you don't use aRtsd or esound!) urpmi is nifty (when it works). Konqourer is really a step forward. Auroura boot is just plain cool. I use Linux on a daily basis these days, but I don't enjoy it as much as I should. XFce and GNOME are decently fast, but lacking in features I enjoyed in Windows. I can use XMMS/ALSA and get good sound, but I have to live without the media framework I had in BeOS. It certainly gets the job done, but it has so much more potential its disgusting. Everything is already there. If only someone non-braindead came along to organize it all...
database functionality... why? (Score:3)
It's a cross platform toolkit! (Score:2)
Java is a cross platform toolkit/language/vm, Qt is a cross platform toolkit for C++.
This lets you build database applications (the VAST majority of application, in fact just about every application is really a database application, think about what computers do...) that will compile for Linux, Win32, Mac OS X, and Qt Embedded platforms...
Pretty slick...
Alex
Re:database functionality... why? (Score:5, Interesting)
OK, not so many points as I thought...
Blatant Kylix Database Plug (Score:2)
Re:database functionality... why? (Score:3, Interesting)
No, it was never just a GUI library. It also included a container class library, strings, streams, graphics file manipulation, and more recently, it has an OO socket implementation, and XML support (Sax and DOM) You're on to something with your Java comment though -- think of it as a C++ version of the Java standard library, if you like.
almost complete source compatibility (Score:2, Insightful)
That means, according to my practice, almost no bigger QT2 project compiles with QT3 without modifications (yes, the modifications are not very big and depending what classes you're used these may not be very much also).
What I really liked with QT3 was new designer, it's way ahead of old dialog drawing app, going near to Delphi's funcionality.
Finally for the Mac! (Score:2, Interesting)
So finally, all of those apps that use Qt to port to Windows now immediately port to Mac OS X with a recompile. Good show, Trolltech!
Read more from their press release [trolltech.com].
Re:Finally for the Mac! (Score:2)
Qt doesn't use native widgets on any platform. This allows developers to subclass widgets and change the way they're displayed in a platform-independant way. This is a good thing.
I haven't tried Qt on OS X, but the performance is good on X11 and Win32, where it uses the same techniques. There's nothing inherently slow about drawing widgets yourself instead of using the operating system's native libraries.
Re:Finally for the Mac! (Score:2)
There is a serious problem with the system designers being so full of themselves that they think they can dictate things like toolkits. The should be spending their time on hard stuff, like advanced rendering models, and stop thinking they are cool because they can program a new type of drop-down menu.
Unfortunately Qt itself seems to be suffering from this too. A lot of this very useful stuff (like the antialiased rendering) is intricately linked to their toolkit such that it is impossible to use it without also using Qt. I am hoping they will start to fix this, as it is probably becoming an unimaginable maintenence mess unless they start looking at layers of libraries.
I would consider using Qt if they would stop copying some of the stupider Windoze things: allow Emacs ctrl keys in the edit widgets, fix the dragging of scrollbars so they don't go back if you drag diagonally, make the "combo box" pop up with the currently selected item under the mouse and make it the full height of the screen, don't move the focus when you click on buttons, allow buttons in the menubar so we don't need a seperate "toolbar", and put the filenames in a single column in the file chooser. KDE needs to fix the window manager to not raise windows when you click on them, and allow windows to be repositioned without raising them. There are a dozen other little problems like this. Until we stop seeing this crap there are going to be people like me who will refuse to use Qt.
Kapps for Mac OS X? (Score:2, Interesting)
Damm (Score:2, Funny)
QT Pricing (Score:5, Insightful)
Earlier we did not had a very good choice for cross platform GUI, AWT/SWING did not have the performance of native GUI and WxWindows was not powerfull/rich enough.
Then came QT and I thought wow ! this is it, for my next cool application, eventhough I will develop it on Linux, I can make it available for Windows as well as Mac users.
Then I realised its only free on X, you got to pay around 1500$ to get it on other platforms even if you want to write/ditribute a freeware app.
On Windows you pay 50$ after rebates to get a copy of VisualC++ 6.0. And for 50$ you get a compiler, GUI class library, and IDE and debugger. And just for the QT library its 30 times more than Visual C++, how can any hobby programmer afford it ?
I hope Trolltech come out with a more sensible pricing for freeware developers on Windows/Mac which should help QT to gain more acceptance in the non Linux programming community as well.
Re:QT Pricing (Score:2)
No, dude. It's free for open source software on Win32 as well:
http://www.trolltech.com/developer/download/qt-wi
Re:QT Pricing (Score:2)
Ah. You're right. I stand corrected.
Well, Qt 3's only been out for a few hours now, maybe they'll get a free 'doze version out at some point.
Re:QT Pricing (Score:5, Informative)
We will be releasing Qt/Windows 3.0 non-commercial and Qt/Mac 3.0 non-commercial within 1-2 weeks (current release date: 20/10/2001)
Michael
TrollTech A.S.
are all KDE contributors paid licensees? (Score:2)
My reading of the Qt license says it can't be both ways; you can't be compensated for the code you develop, unless you buy a license, regardless of your end product license.
Re:are all KDE contributors paid licensees? (Score:4, Insightful)
If you wish to offer non-GPLed code to the world, then yes, you'll need to purchase a license from TrollTech (a great company, from everything I hear). Personally, I really do hope that things go well for them. They're good guys. Does the KDE project have any plans to donate money in their direction?
Personally, I'm a gtk+ man, simply because I prefer C development, and like gtk's handling of classes, types and all that. I also prefer GNOME as a desktop environment. But KDE is sweet, to be sure. It just doesn't do quite what I like. Choice is a Good Thing(tm). I look forward to many years of desktop competition. It should be interesting.
Re:are all KDE contributors paid licensees? (Score:3, Informative)
The Linux Qt goes out as a "Free Edition" while the Windows Qt goes out as the "Non Commercial" edition, with different restrictions on each.
The GPL is not all-knowing is this case. Reading the GPL tells you nothing about the following, which applies to Qt-win:
"Terms of use"
"Developing and distributing applications"
"Private users may use the Qt non-commercial edition in a non-commercial setting to produce non-commercial applications."
"A non-commercial setting means that you must not use the package in the course of your employment or whilst engaged in activities that will be compensated. A non-commercial application is an application that cannot be sold, leased, rented or otherwise distributed for recompense."
Snipped from:
http://www.trolltech.com/developer/download/qt-
Seems odd to use different licences for different platforms, but I'm sure there is logic in it.
Re:are all KDE contributors paid licensees? (Score:2)
Yes-No. If it were GPL then I could use it. I could even pay a bit for it (though not anywhere near $1500). And when I released software (which all of 30 people might ever use), having it be GPL & free would be no problem.
But if I need to use the commercial license, then I can't use it. No option. No choice. I can't. $1500 isn't a feasible price, and there's no budget available. And per copy prices aren't acceptable. not even at $.01 per copy (or less). We don't have an accountant for this matter, and aren't about to hire one.
It's their product. It's their choice. But if the Non-Commercial license for 3.0 is the same as for 2.x, then it's write it off.
Fortunately there are other tools. I'm currently looking at Fox. Which seems to be useable. Not as full-featured as Qt, but feasible.
yacc ... (Score:2, Informative)
----
Notice that moc does not compile with GNU bison, use standard AT&T yacc or Berkeley yacc instead.
----
why do these people refuse to use commonly available tools. I've spent a lot of time searching for these, neither of which are under developemnt or even easily availble. Bison is under development. Why don't they use it, or at least let us use it ??? Because of this, I can't compile qt-3.0.0, and I think this is unacceptable.
Question about Steven's comments in Dr Dobbs... (Score:2, Interesting)
As I said, I don't want to troll, but for those who're using Qt/KDE is this a big concern ? Do you write a handler wrapper class around widgets that hides this mis-match, or do you just live with it ? Does it only happen in one or two spots ? Is short - how do you change your practices to match the toolkit ?
He also dislikes the metaobject compiler and a few other items, but I'm less concerned about those...
T
Re:Question about Steven's comments in Dr Dobbs... (Score:2, Interesting)
1. Include the QOBJECT macro in every class you want to use Qt in
2. You don't have to bother deleting Qt Objects. It's done by Qt.
I think it's great. How is this bad?
Anno.
Re:Question about Steven's comments in Dr Dobbs... (Score:2)
Re:Question about Steven's comments in Dr Dobbs... (Score:3, Interesting)
I agree MFC is nasty (I almost had to use Glockenspiel CommonView 10+ years ago, and MS just stole the entire team to write MFC version 1 - I'd already written my own C++ wrapper by then).
except for two things [...] You don't have to bother deleting Qt Objects. It's done by Qt [...] How is this bad?
When you have a large body of code evolving over a period of time, you often want to check such things as resource leakage. This normally means checking that all allocations match up with deallocations (with a GC-ed resource you do this by checking all your GC code works and by checking people use the GC properly). You check this by matching up alloc and de-allocs of whatever resource it is.
If you have a single block of code that runs
alloc resource
use resource
free resource
then you can easily see that this resource is handled properly (ignore true exceptions for now).
On the other hand
alloc resource
if resource allocated
use resource
free resource
end-if
is also correct, but
alloc resource
use resource
if some-condition
free resource
blah-blah-blah
if some-other-condition
free resource
is usually wrong - it breaks the idiom - reviewing this code should set off alarm bells as allocs and frees don't directly match. If the code is genuinely correct (say the 2 conditions are mutually exclusive) then you have to mark it in some way to say "this misuse of the idiom is correct" - often you "mark it" by refactoring the code to use the idiom
alloc resource
use resource
do-the-commonstuff-here
free resource
In C++ the standard idiom is "object construction is resource allocation", and this makes exception handling and some of the refactoring easier - you allocate the resource in the constructor and free it in the destructor. Again, for the reader/reviewer it is easy to see where allocs and frees match up and prove the use is correct
class blah
{
blah() { alloc resource }
~ blah { free resource }
reset { free resource; alloc resource }
}
Again, this is not language specific, but idioms that make it easy to see when your code is correct. That's why adding a function to the above class
set(r) { free resource; resource = r; }
is nasty - you have an unbalanced freeing of a resource so to prove its correct you have to show that everyone who calls set knows how to use it properly. This seems to be the Qt idiom.
How is this bad ? Add 5 years of development with a rotating team of 10 developers (say turnover of 2 a year) and management, and a medium sized code base of 250,000 lines of code across 25 libraries and a dozen executables.... it's 10pm on the night before a release - do you know where all your allocs and frees are ?? On a small project or a small codebase you can hold it in your head "don't worry about these special cases" but in the larger case it makes for problems, and I put enough bugs in my own code without idioms that encourage me to introduce more. I can think of ways to code around it (a wrapper that allocates the class and gives it to the Qt framework, a bit like auto_ptr) but why doesn't Qt do this for me ?
Long answer to a short question - sorry....
T
Re:Question about Steven's comments in Dr Dobbs... (Score:2)
I have to admit this has caused problems, though for most programs the code savings is enormous (because fltk has to keep track of all the child widgets anyways, this avoids the need for the program to do so just to be able to delete them).
I solved a lot of this with a hack: I made the destructor change part of the object (the "parent widget pointer") to null, and container destructors don't destroy child widgets unless the parent pointer is equal to them, thus avoiding double destructors. This is theoretically bad programming practice but as far as I can tell has never failed. It allows widgets to be local variables, and imbedded (non pointer) members of larger structures, which Qt does not allow, this has proved to be very useful! However it still fails if the programmer calls the destructor after destroying the container.
Re:Question about Steven's comments in Dr Dobbs... (Score:2)
function() {
// this is in the window
// also in window
// put it on the screen
// this destroys the window & widgets
Fl_Window window(...);
Fl_Input textfield(...);
Fl_Button okbutton(...);
window.show();
(wait for user to hit ok button)
return result;
}
I have tried to stop the copy & assignment by making them private and undefined. Unfortunately the stupid MicroSoft VC++ does not like this, and you have to give dummy implementations, which means that code that has rights to call private functions are still not prevented from compiling with assignments and copy constructors. Stupid MicroSoft strikes again!
Re:Call me old fashioned... (Score:2, Informative)
"Recode"? It for the most part requires only a re-link. Thus the "breaks binary compatibility" but "almost complete source compatibility". Changes to any source code which uses Qt should be minor to zero.
Re:Call me old fashioned... (Score:2)
That's also partly true. There hasn't been a stable ABI, so the dependency on the standard library (libstdc++ 2.7/8/9) has resulted in more relinking than changes in Qt. The new ABI for g++ is not standard, but it's supposed to be well a defined ABI that is reconcilable with the standard.
Re:Call me old fashioned... (Score:2)
One hopes not. Trolltech have done a good job of maintaining source compatibility. Binary compatibility however is a much more fragile thing, especially in C++. It is broken by many things, some smaller than changing the interface. I recommend this link here [trolltech.com] as a good explanation of binary compatibility issues.
Re:was wondering... (Score:5, Informative)
You may write commercial/proprietary/non-free software only if you have purchased the Professional or Enterprise Edition. Qt for Windows is only available as Professional or Enterprise Editions.
So, basically, you can (have to) pay to get away from the GPL/QPL/whatever their license is called these days.
They also sell training.
See http://www.trolltech.com/developer/faqs/general.ht ml?cr=1
Re:Still not open-source though (Score:2, Insightful)
Re:Still not open-source though (Score:2)
It's GPL'ed. Is that not open enough for you?
It's dual-licensed - GPL so it can be used with free software, or if you want to use it in a closed-source commercial app, pay TrollTech some money. I think this is a great licensing scheme, as it keeps the source open for people who agree to the GPL's terms while still allowing TrollTech to pay developers to keep developing it full-time. If they weren't making money off of it, I don't think it would be the amazing toolkit that it is today.
Re:Still not open-source though (Score:2)
Re:Still not open-source though (Score:2, Interesting)
Although you are stupid and misinformed (no closed source software anywhere in KDE), with your attitute, you should prefer KDE to Gnome. QT is GPLed, which means that if you want to write commercial applications using it, you have to pay Trolltech for an alternative license. In contrast, the whole of Gnome is no better than LGPLed, which means there is nothing stopping commercial software.
KDE is therefore the better choice for those like Richard Stallman that believe that all software should be free.
Don't uhh... troll (Score:2)
I'm sorry but I have a huge problem with running KDE when there's a dependency on proprietary software.
Sigh. How many times does this have to be explained before people get it?
Qt is Open Source software.
The X11 version (which is what KDE depends on) is licensed under either the GPL or the QPL, at your choosing. If you develop proprietary software (i.e. under a license that is incompatible with either the GPL or the QPL), then a paid-for commercial license is required. This is how TrollTech make their money. Either way, you get full source code.
Even Richard Stallman has given his blessing to KDE and Qt's licensing scheme.
Can I make it any clearer for you?
Re:Still not open-source though (Score:3, Insightful)
That's not entirely accurate. You have to pay for using it if you are making money on it and you're developing closed-source apps.
You are free to make money off of Qt-based apps without paying TrollTech as long as you provide source to your customers as per the GPL. This is why distros are allowed to package KDE and any other GPL-licensed software such as Emacs, Gcc, and others.
Re:Still not open-source though (Score:2)
Re:Qt? Who needs it... (Score:2, Interesting)
There is some nice software like Audacity and Roxfiler using it, but nothing like the amount that *should* be.
Re:Qt? Who needs it... (Score:3, Interesting)
The really cool thing about wxWindows is that at any time somebody could write wxQt, and immediately all wxWindows programs could integrate with KDE as well as they currently integrate with GNOME.
I haven't regretted for a second choosing wxWindows, even if nobody ever writes wxQt, but I sure do like my KDE desktop.
Re:Qt? Who needs it... (Score:2, Informative)
Re:Stallman's response (Score:2, Troll)
Re:Stallman's response (Score:2)
fsf.org. Oversight perhaps ?
Re:speed of Qt (Score:2)
Re:speed of Qt (Score:2)
Well, XFree86 can do mmap for client/server communications on a single system, I believe, so you're really getting pretty good speeds. The biggest issue there is the context switch time, I imagine.
Re:speed of Qt (Score:2)
Re:speed of Qt (Score:2)
The window manager is a problem when you create windows and when you move and resize them. However it does not interfere with the actual drawing of the window contents at all, they are the same speed as if there was no window manager.
Most of Xlib's problems are the enormous numbers of calls that return a value, thus requiring synchronization between the server and client. For instance to draw in an arbitrary color the program needs to ask for the color cell (a round trip) and then set the color cell in as the foreground color and draw (not a round trip). Yes of course any real program will remember the color cell after the first call, but many other things in X require round trips all the time. If no Xlib calls returned a value I think the stream buffering would result in far less context switches than even Windows where the system is put into the kernel.
You are correct that window managers were made before there were shared libraries (or at least before there were shared libraries that the user could easily change). If we could fix this now, I would actually put the entire window into the toolkit. If people wanted the window behavior or borders to change this would be a themable part of the toolkit. Actually I would expect we would be able to get rid of the window borders entirely, which would go a long way toward making a user-friendly and attractive interface.
Re:Server Architecture Crucial (Score:3, Informative)
Re:Server Architecture Crucial (Score:2)
called Citrix ICA. It allows you to run programs remotely.
And you think that's not a client-server architecture? Um, then what is it?
Re:Server Architecture Crucial (Score:2)
Re:Which databases do they support? (Score:2)
Cheers,
Re:for Mac OS X as well ! (Score:2)
AFAIK, theKompany has started using Qt3 a while ago which should mean that their apps should be available on *nix, Win and Mac.
Re:for Mac OS X as well ! (Score:2)
Fully native isn't Carbonised. Fully Native is Cocoa or Java. Thus this will likely miss out on many of the fully native features such as support for Aqua, not just "support for the Aqua look &feel".
Re:Cross-platform configuration (Score:3, Informative)
It's the registry on Windows, and ~/.foobar files on Unix.
http://doc.trolltech.com/3.0/qsettings.html
Cool, eh?
--
Warwick