2009-08-28 10 views
6

Me pregunto por qué Qt usa Q antes de cada nombre de clase en lugar de poner todo en un espacio de nombres. ¿Hay alguna razón en particular, como hacer que los nombres sean fáciles de buscar, o solo se trata de marcas comerciales?¿Cuál es el razonamiento detrás de la forma Qt de nombrar las clases?

+1

sé que es quisquillosa, pero "racional" debe ser "Fundamento". –

+1

simplemente al acecho. Personalmente, como un hablante de inglés no nativo, me gusta que me corrijan. Prefiero ser corregido que seguir usando una palabra o frase equivocada sin saberlo. –

+0

@Matthew Talbert Yo también estoy de acuerdo con Stefano, sean bienvenidos Matthew – yesraaj

Respuesta

7

Creo que es histórico. Los espacios de nombres se introdujeron en C++ alrededor de 1995. El desarrollo de Qt comenzó en 1991, por lo que los espacios de nombres no se podían usar, obviamente.

3

Puede ser un problema de portabilidad. Los espacios de nombres no eran/no son compatibles con todos los compiladores, por lo que la convención de nomenclatura ayuda a reducir el nomenclatura de los conflictos.

+1

por defecto, el código generado por Qt Designer usa ui :: namespace ... Sospecho que puede que no sea el problema – yesraaj

+0

Sí, y Qt _does_ tenga un espacio de nombres 'Qt'. Simplemente no contiene las clases, solo algunas enumeraciones. –

2

Qt es muy conservador en las características del lenguaje C++ que utiliza. Sin espacios de nombres, exceptions or RTTI. Consulte también this article que detalla por qué las plantillas no se utilizan en el manejo de señal/ranura.

+1

Aunque estoy de acuerdo en que Qt es conservador, su enlace a ninguna plantilla es específico para el mecanismo de señal/ranura. Qt definitivamente usa plantillas en muchos de sus códigos. Las excepciones y cosas de RTTI se deben a que se usan en dispositivos integrados, apostaría. Muchas aplicaciones integradas evitan aquellas por la sobrecarga que agregan. –

+0

Ese es un buen punto, y correcto. ¡Enmendará la respuesta! –

0

En vista de que no hay una sola C++ izquierda compilador que no implementa espacios de nombres, hoy en día hay una sola razón: Branding :)

+0

no hay compilador actual tal vez. pero todavía hay muchas personas que usan compiladores más antiguos que no pueden/no pueden actualizar a la última versión. No digo que sea una buena situación, pero a veces simplemente estás atrapado con el uso de un viejo compilador, por cualquier cantidad de razones técnicas o no técnicas. – Glen

+0

Incluso si todos usaran compiladores nuevos que admiten espacios de nombres correctamente (y estoy en desacuerdo con su declaración por cierto: todavía hay compiladores actuales que no admiten todos los matices de espacios de nombres correctamente), todavía hay un * lote * de código Qt que usa la convención de nomenclatura actual. ¿Esperas que todos cambien todo su código Qt a una nueva convención de nombres simplemente para usar espacios de nombres? – Thomi

+1

@Glen, Thomi: Qt usa espacios de nombres hoy en día (desde 4.0), por lo que cualquier compilador que quede sin al menos soporte básico ya no es soportado por Qt (no puede ser soportado). –

2

La documentación de Qt se refiere a namespaces, aunque no el registro del código de ver si son realmente C++ namespace o un hack con declaraciones públicas dentro de una clase. Me imagino que el resto está tratando de evitar causar que todo el mundo tenga que cambiar el nombre de todo, a pesar de que podrían proporcionar una ruta de migración si querían, así:

namespace Qt 
{ 
class Object { ... }; 
} 

#ifndef NO_OLD_DECLS 
typedef Qt::Object QObject; 
#endif 
0

Qt utiliza un prefijo Q como parte de su codificación estilo. Por lo general, sirve para facilitar la lectura del código y detectar qué es qué.

Identificador que:

  • tiene el prefijo "Q" y el sufijo "privado" es una clase privada utilizada para detalles de implementación y no es parte de la API (por ejemplo QPainterPrivate)
  • se prefija con "Q" y no con el sufijo "privado" es una clase pública (por ejemplo QWidget)
  • tiene el prefijo "q" (en minúsculas) son una función global pública (por ejemplo qRgb)

Adoptar un estilo de codificación y usarlo de manera uniforme hace que sea mucho más fácil para otras personas entender el código que no escribieron.

Ref .: Qt Coding Style

Cuestiones relacionadas