On 2015-04-15 10:43, Marc Mutz wrote: > On Wednesday 15 April 2015 11:49:56 André Somers wrote: >> void MyClass::setFoo(QString value) >> { >> PropertyGuard guard(this, "foo"); //foo is the name of the Q_PROPERTY >> Q_UNUSED(guard); >> >> m_foo = value; >> } > > This is an interesting idea, though I don't think I have encountered the > problems with which you motivate PropertyGuard. > > For use in a library, though, I fear the string-based mechanism is too > inefficient. For use within QtWidgets, say, I'd suggest a mechanism that > works > on the member data directly.
FWIW I had the same thought; also, I'm not a fan of needing the Q_UNUSED, or using a macro to 'hide' it. What about something like this? QPropertyGuard g{this}; g.addProperty("a"); // use QObject::property g.addProperty("b", m_b); // take value member by reference g.addProperty(m_c, &cChanged); // ...and also slot address It's slightly redundant because declaring the guard and adding a property are separate, but there is no unused object, and you can use the same guard for multiple properties. The implementation is trickier (probably you need a dynamically allocated templated helper class with a virtual base to store the value and check for changes), but avoids multiple string-based look-ups. The "slot" could be a functor, like QObject::connect accepts, that could be any of the actual slot, std::function, lambda, etc. -- Matthew _______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development