Dissecting the SS

J Duncan me at nospam.com
Thu Sep 28 18:04:22 PDT 2006



Bradley Smith wrote:
> J Duncan wrote:
> 
>> // what QT-style SS would look like in D
>>
>> class AClass
>> {
>>     void aSignal(int i);
>> }
>>
>> class BClass
>> {
>>     void aSlot(int i) { writefln("signal triggered %s", i); }
>> }
>>
>> void main()
>> {
>>     AClass a = new AClass;
>>
>>     BClass b = new BClass;
>>
>>     connect( a, "aSignal(int)", b, "aSlot(int)" );
>>
>>     a.aSignal(10);    // -> writes "signal triggered 10"
>> }
>>
>>
>> i just wanted to give an example of how qt does it. the qt moc 
>> generates the code for the function 'aSignal', this gives it a feeling 
>> like its part of the language. the moc also generates code to map 
>> signal and slot names to addresses. they also provide basic named 
>> properties (named data members with set/get methods) this way. this 
>> results in a pretty nice system that allows things like automatic 
>> signal slot connections in gui classes based on names, (ex. the 
>> 'edit1' widget automatically sends a 'textChanged' signal to a slot on 
>> a parent widget called 'edit1_textChanged') i dont really have a point 
>> to make, i just wanted to give a simple example of qt.
>>
> 
> Is there something more to the QT mechanism? I'm not a QT user, but I 
> figure there must be more too it. Otherwise, why not use the following?
> 
> import std.stdio;
> 
> class AClass
> {
> //  void aSignal(int i);
>     void delegate(int) aSignal;
> }
> 
> class BClass
> {
>     void aSlot(int i) { writefln("signal triggered %s", i); }
> }
> 
> void main()
> {
>     AClass a = new AClass;
> 
>     BClass b = new BClass;
> 
>     //connect( a, "aSignal(int)", b, "aSlot(int)" );
>     a.aSignal = &b.aSlot;
> 
> 
>     a.aSignal(10);    // -> writes "signal triggered 10"
> }
> 
> 
>   Bradley
> 
> 

ok for one, in your example you have a 1 to 1 relationship between 
signals and slots; of course this can be done with built in arrays. but 
i think the key feature is that A doesnt have to know anything about B, 
only that its a qtObject - this provides a whole other level of 
anonymous polymorphism. you no longer care about interfaces or base 
classes, just if an object has a particular slot. i suppose the key 
element missing then would be class introspection.

yeah i found S&S rather silly before i used them, but they quickly 
become powerful tools. it seems especially useful in gui code which is 
heavily event driven. then you have really slick tool integration. many 
mundane tasks are eliminated. you end up just connecting various signals 
to slots in a rich class hierarchy to enable various behaviors.....



More information about the Digitalmars-d mailing list