No me abstendría de usar Qt solo por esas razones. No es necesario que use todas las clases de utilidad de Qt; para los que reemplazan el STL, a lo sumo se verá obligado a usar QString y, posiblemente, QStringList. Además, generalmente hay mucho más en un programa que la GUI. Siempre puede usar C ++ exclusivamente genérico para el resto de su programa, y usar Qt solo para la GUI.
En mi opinión, trabajar con STL se trata más de comprender qué estructuras de datos subyacentes se usan y sus complejidades, y, en consecuencia, en qué momentos debe usar cada contenedor. Y cuando se trata de programación en C ++, se trata especialmente de saber cómo usar el encabezado <algoritmo> muy esencial, que también debería funcionar en los contenedores de Qt, ya que son compatibles con STL.
No veo mucho daño en el uso de todas esas extensiones que Qt proporciona, siempre que sepa (o al menos tenga una idea general) de cómo se implementan internamente. Asegúrese de saber que cosas como Q_OBJECT, SIGNAL (), SLOT (), foreach (), no son mágicas, sino macros que se expanden a declaraciones válidas de C ++. Por ejemplo, no es tan complicado entender cómo se implementan las clases implícitamente compartidas y las relaciones padre-hijo que hacen que Qt se sienta más parecido a Java. Siempre puede intentar recrear alguna funcionalidad en un proyecto separado solo para ver si puede hacerlo con C ++ genérico, y luego no sentirse mal por usarlos en Qt.
Además, eche un vistazo a las bibliotecas de Boost. Proporcionan utilidades adicionales que la biblioteca estándar de C ++ no ofrece, y son una muy buena forma de acercarse un poco más a C ++ genérico, ya que esencialmente siguen las mismas convenciones que C ++ genérico. Algunas de las bibliotecas tienen clases con plantillas bastante complejas, y simplemente tratar de entender cómo funcionan es, en sí mismo, un buen estudio en C ++. Boost tiene muchas utilidades que no se pueden encontrar en Qt, y otras que implementan los mismos conceptos o similares que algunas de las clases de Qt y pueden usarse en su lugar.
Si llega al mercado laboral trabajando con C ++, es probable que trabaje con Qt u otro marco que, de manera similar, tenga sus propias clases de utilidad que intenten simplificar C ++.
Estoy de acuerdo con la mayoría de los elogios de Qt, pero la pregunta era ¿Cuál es el mejor marco de GUI para usar que permite / requiere el mayor uso de C ++ genérico y STL? A este respecto, Qt es un poco esquizofrénico: duplica los contenedores y algoritmos STL con sus propios giros. También proporciona contenedores, que son diferentes a STL. La interoperabilidad entre Qt y STL no siempre es fácil. En algunos casos se necesita un par de llamadas de función para obtener de
std::string
aQString
ida y vuelta.wxWidgets tiene una opción para la compilación STL, que utiliza exclusivamente contenedores STL: no hay un universo paralelo con reemplazos locales como en el caso de Qt. También se compila con un compilador estándar de C ++ sin necesidad de extensiones no estándar. Es un marco GUI de calidad que vale la pena considerar.
También puede echar un vistazo a gtkmm, que es un contenedor de C ++ alrededor de GTK +. Está más cerca de cumplir su primer requisito que Qt.
fuente
No me preocuparía demasiado por no usar bibliotecas STL específicas como std :: string o std :: iostream o std :: vector. Los equivalentes QT tienen un sabor diferente, pero no están tan lejos como para causar problemas.
La diferencia más idiomática en mi opinión parece ser el estilo de programación pesado en el uso
new
para la asignación. Mientras que para un programa QT esto podría estar bien para la parte de Gui, la virtud de C ++ y RAII es que puedes mantener muchos datos en la pila en lugar del montón. Al cambiar a escribir código no GUI, debe recordar eso.fuente
new/delete
llamadas manuales esto no es tan fácil y propenso a errores. En las secciones críticas (manejo de big data) esto puede marcar la diferencia, especialmente lasdelete
llamadas pueden ser bastante lentas.