7
votes

Puis-je utiliser la bibliothèque QT comme C ++ sans utiliser son cadre UI

Il est logique d'utiliser QT pour augmenter la productivité dans une application MFC, sans utiliser le système d'interface utilisateur QT?

Je cherche actuellement ou une bonne bibliothèque de productivité pour mon application basée sur la MFC, avec des classes de conteneur utiles, des algorithmes de cordes, des classes de filetage, des classes d'E / S etc. L'API QT est très agréable à mon avis. Cependant, puisque je ne veux pas changer d'interface utilisateur à qt (trop d'effort), je me demande si qt peut être utilisé bien dans une application MFC sans aucune interface utilisateur QT.

Merci d'avance pour vos opinions.

fabian


0 commentaires

6 Réponses :


0
votes

Si vous ne voulez que pour les classes de collection, pourquoi pas simplement utiliser std :: bibliothèque?


2 commentaires

Eh bien, je regarde aussi des choses comme le filetage. Qt (et boost) ont une fonctionnalité utile que STD ne fournit pas.


L'OP a initialement dit qu'ils voulaient que Qt remplace les classes de collecte MFC



2
votes

the Mumble Project utilise QT pour le client et le serveur, avec le serveur de ne pas avoir de code d'interface utilisateur à Tous, utilisent toujours le reste de l'API QT largement.


0 commentaires

11
votes

QT est divisé en plusieurs modules (Qtgui étant l'un d'entre eux). Vous pouvez choisir à la main quels modules sont utilisés par votre application en reliant uniquement les bibliothèques dont vous avez besoin.

Je ne peux pas répondre si QT sera interopérable avec MFC. Mais à tout le moins, qstring propose une conversion à STD :: String et Char * / WRCHAR, qui devrait vous aider à beaucoup vous aider.

La documentation QT fournit un Vue d'ensemble sur les modules.

Comme Daniel a souligné ci-dessous, vous devez être conscient de la boucle d'événement. Il est toutefois possible d'utiliser la boucle d'événement sans le module GUI. Vous pouvez appeler Processionnaires sur QcoreApplication pour traiter tous les événements en file d'attente, puis retourner . Il y a une mise en garde avec des suppressions différées, mais la documentation décrit la solution de contournement.


2 commentaires

Ce n'est pas entièrement vrai - vous ne pourrez pas utiliser chaque classe de QT sans sa boucle d'événement. Voir @ Deus-EX-Machina399 Réponse: Stackoverflow.com/Questtions/1962103/...


Merci Daniel, j'ai incorporé vos préoccupations à ma réponse.



5
votes

Bien sûr, vous pouvez utiliser Toolkit QT sans utiliser la bibliothèque de l'interface graphique.

Selon vos besoins, vous voudrez peut-être envisager Boost bibliothèques qui fournit un ensemble sain d'API qui aide à beaucoup de choses. Personnellement, je l'utilise pour faire des prises réseau de manière multi-plate-forme, mais il y en a beaucoup plus.


0 commentaires

3
votes

Oui, vous pouvez, il vous suffit d'exclure le module Qtgui de votre projet (.pro) car il est inclus par défaut.

 QT -= gui 


0 commentaires

7
votes

Il existe des classes utilitaires que vous pouvez utiliser, mais il existe une mise en garde très importante. QT dépend très fortement de sa boucle d'événement. La boucle d'événement est démarrée en appelant qapplication :: exécuté () . Maintenant, de nombreuses classes QT dépendent du mécanisme des signaux et des machines à sous sont Qt. Les signaux et les machines à sous dépendent totalement de la boucle d'événement pour fonctionner correctement.

Ceci est totalement vrai pour les modules d'interface graphique mais est également vrai de certains des autres modules. On peut s'attendre à ce que chaque classe dérivée de qObject pour utiliser des signaux et des machines à sous et sera donc inutilisable sans boucle d'événement.


3 commentaires

Hmm, bon à savoir. Est-il théoriquement possible de traiter la boucle d'événement QT non bloquante dans mon application MFC? Ou cela causera-t-il plus de problèmes que d'avantages?


@Fabian: Ce sera très compliqué et en désordre, et je pense que les principales classes de boucle d'événement Qappllication et QcoreApplication supposent qu'ils représentent l'état complet du programme. Ce que vous devriez faire, c'est manquer complètement des signaux et des machines à sous, ce qui est plus sûr et plus sain d'esprit. Même qtnetwork peut être utilisé sans elle; Il suffit d'utiliser des appels de blocage.


+1 Aucune des autres réponses adressées à la boucle d'événement - qui est la clé de Qt.