2011-05-25 14 views
9

Al programar en C++ con Qt, ¿qué debo hacer? Sólo 2 incluyeQt ¿qué encabezados incluir?

#include <QtCore> 
#include <QtGui> 

o

#include <QWidget> 
#include <QDialog> 
#include <QList> 
#include <QKeyEvent> 
#include <QObject> 

para cada clase?

Gracias!

+0

Poco relacionado pero esto podría ser de su interés: http://code.google.com/p/include-what-you-use/ –

Respuesta

9

Incluya solo las definiciones de las clases que necesita; todo lo demás no es solo perezoso, es un desperdicio extremo y, a mi entender, un mal estilo.

Incluir QtGui (que a su vez incluye QtCore) conducirá a agregar unos 350 (!) Archivos de encabezado a su compilación, cuando en su ejemplo solo necesita 6. La compilación tardará más, y cuando alguien intenta mantener su aplicación y está explorando sus archivos que no podrán inferir de solo incluye qué es exactamente lo que cada archivo/clase está tratando de hacer: tendrán que leer toda la fuente para tener una idea.

+3

¡Todo es cierto! Otra consideración, use declaraciones directas siempre que sea posible en sus archivos de encabezado. –

+3

Esta respuesta es incorrecta (parcialmente a la derecha) porque no tiene en cuenta la característica "encabezado precompilado", que convierte los contras en pros. Digo que si usa solo Qt genérico incluye, y no incluye incluye, obtendrá la velocidad de compilación decente y el tamaño binario más pequeño. Esto supone que tienes un compilador moderno con optimizaciones en, de causa. La selección manual incluye un artículo de 90 s. Deje que la máquina se ocupe de cosas obvias, lo hace mejor que el hombre. –

+0

@BarafuAlbino Los encabezados precompilados son buenos para desarrollar un proyecto, pero si el usuario está construyendo, por ejemplo, un software de código abierto para usarlo, todos los encabezados deberán compilarse de todos modos. La selección manual no es "cosas de los 90".Simplemente tiene sentido común declarar claramente sus dependencias en un archivo C++. – SirDarius

2

Si no quiere preocuparse por la inclusión de cada clase individual a continuación, incluyen componentes enteros:

#include <QtCore> 
#include <QtGui> 

y cualquier otro componente QT es necesario utilizar

#include <QtNetwork> 

etc.

Si desea especificar explícitamente sus dependencias, incluya cada clase individual

#include <QWidget> 
#include <QDialog> 
#include <QList> 
#include <QKeyEvent> 

y otras clases de QT que esté utilizando.

5

Solo incluya lo que necesita en sus clases para acelerar la compilación. Si eres uno de los chicos perezosos y no importa el tiempo que lleva compilar, elige los encabezados más genéricos, pero evítalos si estás buscando la optimización (el compilador/enlazador probablemente eliminará las cosas no utilizadas, pero aún así mejor no incluirlo primero).

En general, solo incluyo cosas nuevas si necesito algo que aún falta (es decir, no está incluido aún). Entonces, solo haz clic en compilar. Si le falta algo que olvidó, agregue el encabezado. Si no te gusta ese enfoque, usa los encabezados genéricos que mencionaste.

0

La única diferencia está en el tiempo de compilación. Si no usa los encabezados de precompilación QtGui y QtCore, el tiempo de compilación sufrirá mucho, y debe intentar evitarlo.

Cuestiones relacionadas