[Qt-interest] signals and slots....revisited...
Bo Thorsen
bo at fioniasoftware.dk
Mon Mar 14 09:44:23 CET 2011
Den 14-03-2011 09:22, sarvesh saran skrev:
> Hi Bo,
>
> thank you for your answer. There was one question that is still
> unanswered...
>
> 5. QT stores the names slots and signals of an object in its
> meta object? in what format.....<name,function pointer> ?
>
>
> /Something like it, yes. But you don't need to know. Just use the SLOT
> and SIGNAL macros to access them./
> /
> /
> I would like to know...at least at a higher abstraction. The SLOT and
> SIGNAL macros would generate a string representation of the signal and
> the slot containing the name, arguments etc (kind like a mangled C++
> method name?). These names are then looked up (where?) and the
> appropriate slots are called ( i guess through the meta
> object?..qt_metacall).
I did this:
QLOG_DEBUG() << "Slot:" << SLOT(onFirmwareUpdateAvailable(QString)) <<
"signal:" << SIGNAL(customContextMenuRequested(QPoint));
And got this output:
Slot: 1onFirmwareUpdateAvailable(QString)
signal: 2customContextMenuRequested(QPoint)
These really are just strings with a 1 for a slot and 2 for a signal.
connect() compares these to the lists in the generated moc code and
finds the proper signal or slot.
> I want this info for a variety of reasons...i was under the belief that
> signals and slots involve function pointers until some one very recently
> contradicted this...so i would like some clarification as to how the
> signals/slots are mapped,looked up and called?
You need to read the generated moc code.
> On Mon, Mar 14, 2011 at 12:40 PM, Bo Thorsen <bo at fioniasoftware.dk
> <mailto:bo at fioniasoftware.dk>> wrote:
>
> Hi Sarvesh,
>
> Den 13-03-2011 19:00, sarvesh saran skrev:
>
> I have been a Qt programmer for quite some time now and i understand
> most of the general features of Qt. I am still confused about how
> signals and slots work...
>
> this is what i know (correct me if i am wrong)
>
> 1. slots are like ordinary member functions.however they can be
>
> called via signals irrespective of their access specifier.
>
>
> Yes. A slot is just a method.
>
> 2. emit is a macro that expands to nothing.
>
>
> Correct. Your code would work without "emit" in front of signals,
> but it's useful for Qt programmers to communicate that this is a
> signal emit, so you have no way of knowing how long time it will take.
>
> 3. when you write emit mysignal() you are just calling a function
>
> called mysignal which has been implemented in the
> generated moc file.
>
>
> Correct.
>
> 4. for every object (instantiated from a class containing
> Q_OBJECT
>
> macro and inheriting QObject) an addition meta object is
> instantiated ?
>
>
> Only if your QObject subclass also have the Q_OBJECT macro.
>
> class X : public QObject { ... }
>
> If you don't have Q_OBJECT in the ... there is no additional meta
> object.
>
> 5. QT stores the names slots and signals of an object in its
> meta
>
> object? in what format.....<name,function pointer> ?
>
>
> Something like it, yes. But you don't need to know. Just use the
> SLOT and SIGNAL macros to access them.
>
> 6. connections between objects are made at runtime...how??
> not sure
>
> how and where a slot is searched for....
>
>
> The SLOT and SIGNAL macros generates a string based on name, type
> (slot or signal) and arguments. Then it does a string compare until
> it finds the one it's looking for.
>
> 7. but the arguments in the connect call are matched at
> compile time?
>
>
> No, it's all runtime. If you need compile time matching, boost
> signals is the solution.
>
> 8. while connecting, only the arguments of the slot is
>
> checked...surplus arguments are discarded.
>
>
> Correct. You can have fewer arguments on the slots than there are on
> the signals, and the generated moc code will just disregard those.
> But you can't have more arguments on the slots than there are on the
> signals.
>
> 9. SIGNAL and SLOT are macros......not sure what their
> purpose is....
>
>
> They generate the string from the slot/signal signature.
>
>
> i tried to look into the generated moc file but things are still
> murky..any help will be greatly appreciated.
>
>
> I hope this helps :)
>
> Bo Thorsen,
> Fionia Software.
>
> --
>
> Expert Qt and C++ developer for hire
> Contact me if you need expert Qt help
> http://www.fioniasoftware.dk
>
>
Bo Thorsen,
Fionia Software.
--
Expert Qt and C++ developer for hire
Contact me if you need expert Qt help
http://www.fioniasoftware.dk
More information about the Qt-interest-old
mailing list