Marianne Gagnon wrote:
Hi Justin,
looking at QtD, it seems like it can be done :
In file
http://www.dsource.org/projects/qtd/browser/demos/browser/browsermainwindow.d
m_historyHome.triggered().connect(&this.slotHome);
// ...
public:
void slotHome()
{
// ...
}
I however believe that this kind of delegate-connection can also be performed
in C++ (with templates?). Maybe Qt developers simply continue using the MOC
because they don't want to break backwards compatibility.
-- Auria
Maybe to a small degree but it seems to me that the Qt Meta-Object
Compiler does more than just support signal and slot connections. There
are a number of "C++ extension" that can go in a class declaration like
Q_OBJECT, Q_PROPERTY, Q_ENUMS, Q_CLASSINFO.
e.g. as below from from http://doc.trolltech.com/4.4/moc.html
The MOC mechanism makes it trivial to expose classes in Qt to scripting
with QtScript (basically Qt version of JavaScript).
I haven't dug deep enough into QtD to know how it fares in the scripting
arena though.
Cheers
Justin Johansson
<QtDocumentation>
In addition to the signals and slots shown above, moc also implements
object properties as in the next example. The Q_PROPERTY() macro
declares an object property, while Q_ENUMS() declares a list of
enumeration types within the class to be usable inside the property system.
In the following example, we declare a property of the enumeration type
Priority that is also called priority and has a get function priority()
and a set function setPriority().
class MyClass : public QObject
{
Q_OBJECT
Q_PROPERTY(Priority priority READ priority WRITE setPriority)
Q_ENUMS(Priority)
public:
enum Priority { High, Low, VeryHigh, VeryLow };
MyClass(QObject *parent = 0);
~MyClass();
void setPriority(Priority priority);
Priority priority() const;
};
The Q_FLAGS() macro declares enums that are to be used as flags, i.e.
OR'd together. Another macro, Q_CLASSINFO(), allows you to attach
additional name/value pairs to the class's meta-object:
class MyClass : public QObject
{
Q_OBJECT
Q_CLASSINFO("Author", "Oscar Peterson")
Q_CLASSINFO("Status", "Active")
public:
MyClass(QObject *parent = 0);
~MyClass();
};
</QtDocumentation>