[Kde-bindings] Qyoto Custom Signal Arguments

Richard Dale Richard_Dale at tipitina.demon.co.uk
Thu Aug 24 18:24:35 UTC 2006


On Thursday 24 August 2006 19:07, Arno Rehn wrote:
> OK, now as the more serious bugs are fixed the bindings are really close to
> getting useful.
Yes, I'll try and update to TODO list and we can discuss anything we can think 
of that needs doing. More marshalling code and improving the Makefiles/build 
system are the most important I think.

> But there's still one problem: arguments for custom signals don't work. I
> took a quick look at the way it is done in qt4-qtruby and it seems to be
> nearly the same.
> When I watch the variables in the EmitSignal class, there is something
> passed to the class. But apparently it isn't processed correctly or so.
> Am I right, that QMetaObject::activate() emits a signal?
> I don't find any documentation about this method on the Net or in the Qt
> docs and it doesn't appear in any of the header-files.
> Any ideas what to do?

Q_EMIT is set up in QObject.cs like this:

				Type proxyInterface = Qyoto.GetSignalsInterface(GetType());
				SignalInvocation realProxy = new SignalInvocation(proxyInterface, this);
				Q_EMIT = realProxy.GetTransparentProxy();

SignalInvocation.Invoke() in SmokeInvocation.cs calls the C method: 
SignalEmit() in qyoto.cpp:

SignalEmit(signature, (IntPtr) instanceHandle, (IntPtr) stackPtr, 
callMessage.ArgCount);

That then uses the C++ class EmitSignal to actually invoke the signal:

	EmitSignal signal(qobj, i, items, args, sp);
	signal.next();

EmitSignal::emitSignal() calls the undocumented Qt internal method activate() 
to actually invoke the slots connected to the signal:

  _qobj->metaObject()->activate(_qobj, _id, o);

The code to emit signals used to work, and so if it's now stopped it problably 
is only something minor, and it's a matter of tracing the code through the 
above steps to see where it goes wrong.

I think I've changed the QtRuby code a bit since I copied it to use it Qyoto, 
so it might be worth having a look at it and updating Qyoto. But it's 
probably best to try and track down the bug first.

-- Richard





More information about the Kde-bindings mailing list