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
_______________________________________________
Interest mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/interest