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?
Respuesta
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.
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.
por defecto, el código generado por Qt Designer usa ui :: namespace ... Sospecho que puede que no sea el problema – yesraaj
Sí, y Qt _does_ tenga un espacio de nombres 'Qt'. Simplemente no contiene las clases, solo algunas enumeraciones. –
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.
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. –
Ese es un buen punto, y correcto. ¡Enmendará la respuesta! –
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 :)
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
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
@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). –
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
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
- 1. ¿Cuál es el razonamiento de diseño detrás de HandleScope?
- 2. ¿Cuál es el razonamiento detrás de los encabezados?
- 3. ¿Cuál es el razonamiento detrás del contexto zeroMQ?
- 4. ¿Cuál es el razonamiento detrás del encabezado HTTP Date?
- 5. ¿Cuál es el razonamiento detrás de las diferentes formas de corsé?
- 6. ¿Cuál es el razonamiento detrás de poner constantes en las declaraciones if primero?
- 7. ¿Cuál es el razonamiento detrás de BitTorrent KRPC utilizando BEncode en lugar de BSON?
- 8. ¿Cuál es la forma correcta de incluir encabezados Qt?
- 9. ¿Cuál es el razonamiento detrás del principio de segregación de interfaz?
- 10. Razonamiento detrás de `from ... import ...` sintaxis en Python
- 11. ¿Cuál es el razonamiento detrás de los registros cerrados en Clojure?
- 12. ¿Cuál es el punto detrás de las intersecciones de clases de caracteres en Regex de Java?
- 13. Razonamiento detrás de ASP.NET MVC ActionResult es una clase abstracta?
- 14. razonamiento detrás de la cerradura dentro de la cerradura?
- 15. ¿Cuál es el razonamiento detrás del reclamo "PHP no escala (bien)"?
- 16. Razonamiento detrás del uso de un motor de reglas
- 17. ¿Cuál es la forma correcta de nombrar las propiedades del mensaje en i18n?
- 18. razonamiento detrás de la regla ArrayIsStoredDirectly del PMD
- 19. ¿Cuál es el algoritmo detrás de sleep()?
- 20. ¿Cuál es la magia detrás de Lightstreamer?
- 21. ¿Cuál es el concepto detrás de R.java?
- 22. ¿Cuál es el propósito de la restricción nombrar
- 23. ¿Cuál es la mejor práctica para nombrar y codificar clases CSS e identificadores de varias palabras?
- 24. ¿Cuál es el razonamiento detrás de typedef vs struct/union/enum, no podría haber solo un espacio de nombres?
- 25. ¿Cuál es el algoritmo detrás de la generación de buscaminas
- 26. ¿Cómo debo nombrar mis clases de CSS?
- 27. ¿Cuál es la mejor forma de reutilizar las clases de otro proyecto Java en Eclipse?
- 28. ¿Cuál es la forma correcta de representar las clases de plantilla con UML?
- 29. ¿Cuál es el concepto detrás de la compresión zip?
- 30. ¿Cuál es el propósito de las clases parciales?
sé que es quisquillosa, pero "racional" debe ser "Fundamento". –
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. –
@Matthew Talbert Yo también estoy de acuerdo con Stefano, sean bienvenidos Matthew – yesraaj