D2 GUI Libs

Eldar Insafutdinov e.insafutdinov at gmail.com
Sun Dec 13 11:44:30 PST 2009


Nick Sabalausky Wrote:

> "Nick Sabalausky" <a at a.a> wrote in message 
> news:hg394f$mr1$1 at digitalmars.com...
> > "Eldar Insafutdinov" <e.insafutdinov at gmail.com> wrote in message 
> > news:hg2p87$2ttj$1 at digitalmars.com...
> >>
> >> 1) You may know the concept of signals and slots in Qt. Consider the 
> >> following snippet:
> >>
> >> class Test : QObject
> >> {
> >>    mixin Signal!("signal_1(string)");
> >>
> >>    mixin Slot!("slot_1(string str)");
> >>    void slot_1(string str)
> >>    {
> >>        writefln("slot_1 invoked with ~ " str);
> >>    }
> >>
> >>    mixin Q_OBJECT;
> >> }
> >>
> >> In Qt objects, that inherit from QObject are capable of having signals 
> >> and slots and participate in connections. In the current scheme mixins of 
> >> Signal and Slot template mix some static information into the class. The 
> >> class is then scanned when Q_OBJECT template is mixed in and the proper 
> >> meta-information is generated to register signals and slots in the Qt 
> >> type system.
> >> As you see, this declaration is a bit ugly. In particular defining a slot 
> >> requires to duplicate its signature in a mixin. What would really be 
> >> awesome is a mechanism allowing something like:
> >>
> >>    @Slot
> >>    void slot_1(string str)
> >>    {
> >>        writefln("slot_1 invoked with " ~ str);
> >>    }
> >> I.e we need annotations. But I am not sure how this will work. One of the 
> >> possible solutions will be that @Slot expands into mixin Slot!(symbol, 
> >> AnnotationArg1, ...).
> >>
> >
> 
> Oops, slight typo:
> 
> > Try string mixins, something like this:
> >
> > 1. Rename Slot to _Slot.
> >
> > 2. Do this:
> >
> 
> // Fixed:
> template Slot(string decl, string body)
> {
>     const string Slot = "
>         mixin _Slot!("~decl.stringof~");
>         void slot_1(string str)
>         {
>             "~body.stringof~"
>         }
>     ";
> }
> 
> >
> > class Test : QObject
> > {
> >    mixin Signal!("signal_1(string)");
> >
> >    mixin( Slot!("slot_1(string str)", q{
> >        writefln("slot_1 invoked with ~ " str);
> >    }) );
> >
> >   mixin Q_OBJECT;
> > }
> >
> > 
> 
> 

Thank you for suggestion, but while reducing redundancy it became even uglier! I'll better stay with the current syntax.



More information about the Digitalmars-d mailing list