[Interest] Requesting QObject::bind() method

Thiago Macieira thiago.macieira at intel.com
Fri Mar 24 00:56:52 CET 2017


On quarta-feira, 22 de março de 2017 03:26:21 PDT André Somers wrote:
> That's not quite true. First of all, you are not referencing the getter
> in the example above. Then, a ::bind would also initialize the receivers
> value to the current value. Qt::connect does not do that. Also, a ::bind
> suggests that the connection is exclusive at the receiving end and
> setting a new bind will break the old one; a connection explicitly is not.

Ok, those are two good points (setting the initial value and ensuring each 
source property is bound to exactly one expression).

It could be a simple as:

template <typename Getter, typename Signal, 
		typename Receiver, typename Setter>
QMetaObject::Connection bind(QObject *sender, Getter getter, Signal signal,
		Receiver receiver, Setter setter)
{
	QMetaObject::Connection c = 
		connect(sender, signal, receiver, setter, Qt::ExclusiveConnetion);
	if (c)
		(receiver->*setter)( (sender->*getter)() );
	return c;
}

The only innovation here is Qt::ExclusiveConnection (which is different from 
Qt::UniqueConnection). The syntax needs a little work so that the setter can 
be a PMF or a lambda.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center




More information about the Interest mailing list