------ Original Message ------
From: "Thiago Macieira" <thiago.macie...@intel.com>
To: development@qt-project.org
Sent: 04/12/2015 03:00:15
Subject: Re: [Development] Proposal to change connectSlotsByName behavior

On Friday 04 December 2015 00:27:09 Olivier Goffart wrote:
I don't think it will break too many applications because anyone who was relying on the order of instentiation for that has just its application working out of pure luck. (And i'm pretty sure that your proposal is always
 the intended behaviour)

Note that for widgets, the order is not pure luck. The order of children of a QWidget implies the tabbing order. Therefore, it is usually well-defined.
There are explicit methods for setting the tab order. Relying of the order of creation (which may be the default tab order - I did not check) is also pure luck, especially with designer-created UI's. I would think the connect-by-name is more used with designer created UI's than with hand-crafted UI.


I don't mind changing the order, as long as there's a consensus in the mailing
list.

I am for it. I think it makes more sense than the current behaviour.

If we do decide to change the order, I have a follow-up question:
 do we change it only in connectSlotsByName, or do we change
 QObject::findChildren to reflect the new order?
Both. A breath first search makes sense there as well. I don't think the order of the children is specified there so one should not rely on it anyway.


Right now, connectSlotsByName simply uses findChildren's order. If we decide to change the order in one but not the order, I'd like to hear a compelling
reason why it's ok for them be different.

Because that is an implementation detail. That the one uses the other makes it convenient for them to be the same, but the one does not _need_ to use the other. But in this case I think it makes sense for both to change. If changing findChildren is regarded as too risky though, I don't think that that is an argument to not change connectSlotsByName either.

 Other possibilities may include:
- Connect signals of both objects. (Probably not a good idea since it does
 make it even more confusing)

Agreed that this is not a good idea. Let's discard it.

  - Throw a warning if there are two objects with the same name.

This is orthogonal.

I'd like to add a new alternative (though it does not exclude a change now either):

- Deprecate the behaviour and remove in Qt 6.

I have never thought this feature to lead to good design. It makes for "magic" in the sense that it is tricky to trace what happened. It leads to un-Qt-ish naming of methods, and it leads to naming methods based on when they are triggered instead of what they do. I find the latter usually leads to more readable code, more so if there is more than one way to trigger the behaviour encoded in the method. Last, I think private slots (for which this would be most used) are largely on the way out anyway. Trivial slots can be replaced by lambda's and non-trivial ones need a good function name anyway.

André



_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to