Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the right way to include Qt headers?

Tags:

c++

qt

qt4

So far I know several ways to #include Qt classes:

  • #include <QtModule>

    This brings all classes of a specific module, for example QDomDocument, QDomElement, QDomNode and numerous others from #include <QtXml>.

  • #include <QClassName>

    This adds declaration of a specific class one may want to use, e.g. QEvent, QStringList, QFile.

  • #include <qcstyleheader.h>

    This has effect of the previous method, except for differently looking header name.

So I wonder, are there any other ways to #include Qt classes? Are they equivalent, or are some of them preferred to others because of some reasons? Does this depend on #include-ing inside a .cpp or a .h file? Does this influence compilation speed and size of the executable?

In short, what is the best way to go?

like image 660
ulidtko Avatar asked Dec 14 '10 09:12

ulidtko


1 Answers

As a rule, the more header files there are, the longer it takes the compiler to parse each module. (Obviously precompiled headers render some of this moot.) So you generally want to include the fewest header files necessary to build your app correctly.

If you are only using a few classes in a given compilation unit, then just include the classes by name, in the modern style:

#include <QEvent>
#include <QPainter>
#include <QFont>

If you use a large number of classes from a given module, it is probably just as easy to include the module-level header, such as:

#include <QtGui>

You generally only use the older .h style if a newer style header doesn't exist.

Now precompiled headers mitigate many of these issues by compiling once into a binary form. But there is still a cost to loading the precompiled symbols into memory and searching through them at compilation time. So the less you put in, the more efficient the build will be.

like image 127
gavinb Avatar answered Oct 05 '22 03:10

gavinb