Qt going LGPL

Dave Smith dave at thesmithfam.org
Wed Jan 14 11:42:18 MST 2009


Barry Roberts wrote:
> And even some of us with only a mild distaste for C++ find Qt 
> unattractive because you don't REALLY write C++.  At least the last 
> time I checked, you wrote in a very C++-like language that moc 
> pre-processed to C++.  That gave me a rash.  I can understand why they 
> did it, but I would argue that it's not C++.

That's a common misconception. The moc does not actually translate 
anything. All the Qt code you write is honest-to-goodness compilable 
C++. The moc generates companion C++ files that get built and linked in 
to your executable by parsing your C++ code and looking for keywords 
like "signals:" and "slots:". The terms "signals" and "slots" are 
actually pre-processor defines that are defined to nothing.

For example. Here's a QObject-derived class:

class MyObject : public QObject
{
    Q_OBJECT
    public:
     MyObject(QObject *parent=0);
    public slots:
     void mySlot();
    signals:
     void mySignal();
}

In this case, Q_OBJECT is a macro that expands to some code needed by 
QObject to enable signals and slots. The term "slots" and "signals" are 
both macros that expand to nothing.

The moc will come in and see the word "slots" and "signals" and generate 
a file called moc_MyObject.cxx and is also compilable C++ code, which 
contains all the signal and slot handling code.

Be it known that Qt *is* C++. There is no language translation at all.

I've been hacking Qt code for about 4 years, and I love it. I highly 
recommend it for any GUI project. I even use it on the server-side 
because it provides such a rich framework of functionality. Everything 
from regex to strings to sockets.

--Dave



More information about the PLUG mailing list