Kdelibs Coding Style vs. preparations for Qt5
Kevin Ottens
ervin at kde.org
Sat Dec 29 09:48:48 GMT 2012
Hello,
On Saturday 29 December 2012 02:47:13 Friedrich W. H. Kossebau wrote:
> --- 8< ---
> Qt Includes
>
> If you add #includes for Qt classes, use both the module and class name.
> This allows library code to be used by applications without excessive
> compiler include paths.
>
> Example:
> // wrong
> #include <QString>
>
> // correct
> #include <QtCore/QString>
> --- 8< ---
> From http://techbase.kde.org/Policies/Kdelibs_Coding_Style#Qt_Includes
Since I've been skimming quite a bit through kdelibs codebase recently,
needless to say this rule is in practice void as it's clearly not followed.
> Of course the current Qt Coding Style, which is the base of the kdelibs one,
> does not mention anything about that, given that its about their own
> headers.
Yep.
> Now the Porting from Qt 4 to Qt 5 guide from KDAB recommends this:
> --- 8< ---
> Fixing up includes
>
> [...]
>
> Or more portably (Which works in Qt 4 and Qt 5):
> #include <QWidget>
> --- 8< ---
> From http://www.kdab.com/porting-from-qt-4-to-qt-5/
>
>
> So what to do about this?
I *personally* prefer the fully qualified style with the module name. That
said, since we don't have per module namespaces to go with it and the like
it's rather cosmetic more than anything. Now add to that the fact that the
fully qualified style will generate more work when you port (for classes
moving from one module to another) it sounds like it's the right move to drop
them completely and use only the class name for includes[*].
> Will kde-frameworks be Qt5-only, so not need to support both Qt4 and Qt5 and
> thus to use module-less Qt includes?
For now it supports both, but it's very likely that by the end of january it
will be Qt5 only.
> Or will the includes be if-def'ed? So will projects which refer to the
> Kdelibs Coding Style need to add an exception to their rules for the
> includes, if they want to prepare for Qt5?
>
> Or does the rule need adaption?
With what I wrote above I think the natural conclusion is to adapt the rule.
We should push to use the class name only includes I think.
Also, contributing to Qt itself more, I noticed some differences in style
between both (namely: we ignore space around operators, and we for braces
around single line statements). Your question makes me wonder if we should
update our own KDE Frameworks style to be closer of the Qt one. The aim here
would be to be consistent accross the whole stack.
Actually looking at both documents now, I see we should already follow the
spacing around operators today... I think the intent of our coding style was
to be "the Qt style with extra exceptions" but somewhere in the wording this
gets lost. Maybe we should do a better job at it... If we go toward being
closer to the Qt style maybe the proper way out would be to shorten the
document quite a bit saying: use the Qt style + includes section + astyle
section + emacs & vim section. Right now by duplicating some but not all of
the Qt style we're diluting the messaging it seems. Opinions?
Thanks for bringing it up though, it's definitely the right time for that.
Regards.
PS: Please, before hitting reply think twice! This type of thread can easily
degenerate in bikeshedding. So put your personal preferences at the door as I
tried to, it's really not the point.
PPS: My PS might sound obvious and unneeded to some of you, but I got burnt
enough times with coding styles discussions to be extra cautious now. It's
really easy to loose perspective and I might end up doing the mistake myself,
the reminder is for me too. :-)
[*] Note that, History might prove me wrong there at some point if Qt6
introduces classes with the same name in different modules... if that's the
case I hope it'll come with consistent namespacing though. :-)
--
Kévin Ottens, http://ervin.ipsquad.net
KDAB - proud patron of KDE, http://www.kdab.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20121229/b51cf8bd/attachment.sig>
More information about the kde-core-devel
mailing list