2010-12-14 17 views
5

Hasta ahora Conozco varias maneras de #include clases Qt:¿Cuál es la forma correcta de incluir encabezados Qt?

  • #include <QtModule>

    Esto trae todas las clases de un módulo específico, por ejemplo QDomDocument, QDomElement, QDomNode y numerosos otros de #include <QtXml>.

  • #include <QClassName>

    esto se suma la declaración de una clase específica uno lo desea, puede utilizar, por ejemplo, QEvent, QStringList, QFile.

  • #include <qcstyleheader.h>

    Esto tiene efecto del método anterior, excepto por mirar de manera diferente nombre del encabezado.

Por eso me pregunto, ¿hay otras maneras de #include clases Qt? ¿Son equivalentes, o son algunos de ellos preferidos a otros debido a algunas razones? ¿Esto depende de #include -ing dentro de un archivo .cpp o .h? ¿Esto influye en la velocidad de compilación y el tamaño del ejecutable?

En resumen, ¿cuál es la mejor manera de hacerlo?

Respuesta

9

Como regla general, cuantos más archivos de encabezado hay, más tiempo le toma al compilador analizar cada módulo. (Obviamente, los encabezados precompilados representan algo de esto discutible). Por lo tanto, generalmente desea incluir la menor cantidad de archivos de encabezado necesarios para compilar su aplicación correctamente.

Si usted está utilizando solamente unas pocas clases en una unidad de compilación dado, a continuación, sólo se incluyen las clases por su nombre, en el estilo moderno:

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

Si se utiliza un gran número de clases de un módulo dado , es probable que sea igual de fácil para incluir la cabecera de nivel de módulo, tales como:

#include <QtGui> 

Por lo general, sólo utiliza el estilo antiguo .h si un nuevo estilo de cabecera no existe.

Ahora los encabezados precompilados mitigan muchos de estos problemas compilando una vez en forma binaria. Pero todavía hay un costo para cargar los símbolos precompilados en la memoria y buscarlos en el momento de la compilación. Así que cuanto menos pongas, más eficiente será la construcción.

+1

¿Alguien sabe cómo hacer que Visual Studio se autocomplete para dejar de disparar para las versiones .h y sin darme la opción de lo contrario? Tengo que luchar contra VS todo el tiempo que lo estoy usando en este tema: "¡NO! Quiero detenerme allí, no agregue .h a lo que acabo de escribir cuando puse un cierre>!" -> [ESC] "ahh"> Muy malditamente molesto. –

+1

Creo que en 2010 puede deshabilitar la finalización automática de encabezados. Ir a 'Herramientas-> Opciones-> Editor de texto-> C/C++ -> Avanzado-> Desactivar #incluir auto-completado'. – RedX

1

Esta parece ser una pregunta general. Y la respuesta es simple: incluya solo lo que debe. De lo contrario, estás ralentizando la compilación. En el encabezado, intenta reenviar declarar. Si eso no es suficiente, incluya el encabezado que declara la clase.

1

No creo que haya ninguna razón universalmente forma de incluir ... Mi forma preferida es la segunda, ya que es más fácil - simplemente lo haces para cada clase que utiliza en su archivo, mucho menos pensar es necesario

En cuanto a la velocidad de compilación, sí, los encabezados Qt demoran un tiempo en compilarse. Si quieres compilar más rápido, # incluye todo lo que necesitas en archivos .cpp. A veces necesita incluir archivos .h. Si declara una clase, siempre debe incluir #include su clase base y las clases de los miembros que conserva por valor dentro de la clase o que pasan el valor en las funciones de la clase. Sin embargo, para aquellos miembros y parámetros de funciones que se declaran como punteros, punteros inteligentes o referencias, puede sustituir #include con "class foo;" declaración. Luego, su encabezado se compilará más rápido, pero aún debe #incluir estas clases siempre que las use por valor.

+0

"No creo que exista ninguna forma universalmente correcta de incluir ..." Esto es incorrecto, porque Qt no puede respaldar razonablemente la opinión o los caprichos de todos. Qt admite el '#include ' y '#include '. Si haces algo más, estás solo: eso puede estar bien, o puede que no. La capacidad de mantenimiento y la adherencia a un estilo tienen sus beneficios. –

1

beneficios significativos Personalmente, he encontrado (~ 30% de descuento veces compilar?) De que incluye todo el Qt incluye utilizo en un encabezado precompilado (example), en lugar de en cada .cpp .h/según sea necesario. Por supuesto, la desventaja menor es que puede perder de vista de qué partes de Qt dependen específicamente sus archivos fuente individuales, pero no he encontrado que esto sea un problema yo mismo.

Cuestiones relacionadas