[Development] RFC: banning _q_slot() in favour of new-style connect()?

Marc Mutz marc.mutz at kdab.com
Fri Oct 12 07:27:51 CEST 2012


Hi,

I was wondering whether we should stop using the pattern of declaring 
_q_privateSlots() in favour of connecting to functors or functions directly.

Rationale:
R1. the _q_ prefix is just a convention, the slot can still be called through
  the meta-object and still can be reimplemented in more-derived classes. With
 new-style connects, there'd be no slot to call or reimplement, so the code
  would become easier to understand (d/t more narrow scope).
R2: less space used in meta-object
R3: allows patch releases to add or remove code that would formerly have
  required _q_slots().

Gotchas:
G1. The slot could have been overridden in a more-derived class
G2. The Private pointer could change in between the connect() and the emit.
  Currently, this is transparently handled by injecting a call to d_func()
  into the moc-generated code. For new-style connect, such a situation would
  require a disconnect/connect pair.

The full solution would be to try to remove all _q_slots() from Qt 5.0. Seeing 
as this change could also be done in 5.1, I'd only propose to ban _new_ 
_q_slots() from being added.

Opinions?

Thanks,
Marc

-- 
Marc Mutz <marc.mutz at kdab.com> | Senior Software Engineer
KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
www.kdab.com || Germany +49-30-521325470 || Sweden (HQ) +46-563-540090
KDAB - Qt Experts - Platform-Independent Software Solutions



More information about the Development mailing list