2009-12-25 9 views
5

¿Tiene sentido usar Qt para aumentar la productividad en una aplicación MFC, sin utilizar realmente el sistema de interfaz de usuario Qt?¿Puedo usar Qt como biblioteca C++ sin usar su marco de interfaz de usuario

Actualmente estoy buscando o una buena biblioteca de productividad para mi aplicación basada en MFC, con útiles clases de contenedor, string algorithmus, clases de subprocesamiento, clases de E/S, etc. La Qt API es muy agradable en mi opinión. Sin embargo, dado que no quiero cambiar mi UI a Qt (demasiado esfuerzo), me pregunto si Qt se puede usar bien en una aplicación MFC sin Qt UI.

Gracias de antemano por sus opiniones.

Fabian

Respuesta

10

Qt se divide en varios módulos (QtGui es uno de ellos). Puede seleccionar manualmente qué módulos usa su aplicación al vincular solo las bibliotecas que necesita.

No puedo responder si Qt será interoperable con MFC. Pero, como mínimo, QString ofrece conversión a std :: string y char */wchar, lo que debería ayudar bastante.

La documentación de Qt proporciona un overview sobre los módulos.

Como ha señalado daniel a continuación, debe tener en cuenta el ciclo de eventos. Sin embargo, es posible utilizar el bucle de evento sin el módulo GUI. Puede llamar al processEvents en QCoreApplication para procesar todos los eventos en cola y luego regresar. Hay una advertencia con eliminaciones diferidas, pero la documentación describe la solución.

+0

Esto no es del todo cierto: no podrá usar todas las clases en Qt sin su ciclo de eventos. Ver @ deus-ex-machina399 respuesta: http://stackoverflow.com/questions/1962103/can-i-use-qt-as-c-library-without-using-its-ui-framework/1962260#1962260 –

+0

Gracias Daniel, incorporé tus preocupaciones en mi respuesta. – Storm

0

Si sólo desea para las clases de colección por qué no sólo tiene que utilizar std :: biblioteca?

+1

Bueno, también estoy buscando cosas como el enhebrado. Qt (y Boost) tienen una funcionalidad útil que std no proporciona. – Fabian

+0

Qt es mucho más que std :: –

+0

El OP originalmente dijo que quería que Qt reemplazara las clases de colección MFC –

2

El Mumble project utiliza Qt para el cliente y el servidor, con el servidor sin ningún código de UI en absoluto, todavía utilizando el resto de la API de Qt de manera exhaustiva.

5

Claro, puede usar QT toolkit sin usar su biblioteca GUI.

Dependiendo de sus necesidades, es posible que desee considerar boost bibliotecas que proporciona un conjunto de API que ayuda para muchas cosas. Yo personalmente lo uso para hacer tomas de red de una manera multiplataforma, pero hay mucho más en él.

+0

+1 para la mención de impulso. –

3

sí puede, solo tiene que excluir el Módulo QtGui de su proyecto (.pro) porque está incluido por defecto.

QT -= gui 

como este, solo se utiliza el Módulo central.

7

Hay algunas clases de utilidad que puede usar, pero hay una advertencia muy importante. Qt depende en gran medida de su ciclo de eventos. El ciclo de evento se inicia llamando al QApplication::exec(). Ahora muchas clases Qt dependen de las señales y el mecanismo de las ranuras es Qt. Las señales y las ranuras dependen totalmente del ciclo de eventos para funcionar correctamente.

Esto es totalmente cierto para los módulos de GUI, pero también es cierto para algunos de los otros módulos. Se puede esperar que todas las clases derivadas de QObject utilicen señales y ranuras y, por lo tanto, serán inutilizables sin el bucle de eventos.

+0

Hmm, es bueno saberlo. ¿Es teóricamente posible procesar el ciclo de eventos Qt sin bloqueo dentro de mi aplicación MFC? ¿O esto causará más problemas que beneficios? – Fabian

+1

@Fabian: Será muy complicado y complicado, y creo que las clases de ciclo de eventos principales QApplication y QCoreApplication asumen que representan el estado completo del programa. Lo que debes hacer es perder por completo las señales y las ranuras, lo que es más seguro y más sensato. Incluso QtNetwork se puede usar sin él; solo use llamadas de bloqueo. – blwy10

+0

+1 ninguna de las otras respuestas se dirigió al ciclo de eventos, que es clave en Qt. –

Cuestiones relacionadas