155 votes

Qt contre WPF/.NET

Ma société essaie de prendre la décision d'utiliser Qt/C++ pour notre cadre d'interface graphique ou de migrer vers .NET et d'utiliser WPF. Jusqu'à présent, nous avons utilisé MFC. Il semble que .NET/WPF soit techniquement la plate-forme la plus avancée et la plus riche en fonctionnalités. J'ai cependant plusieurs préoccupations. Il s'agit notamment de :

  • Support de la plateforme
  • Longévité du cadre (c.-à-d. garantie de l'avenir)
  • Performance et frais généraux

Pour cette application, nous sommes prêts à sacrifier le support de Windows 2000, des Macs et de Linux. Mais le problème est davantage lié à l'engagement de Microsoft envers le framework et ses plates-formes existantes. Il semble que Microsoft ait la mauvaise habitude d'inventer quelque chose de nouveau, de le promouvoir pendant quelques années, puis de le reléguer à la poubelle en abandonnant les développeurs qui l'ont choisi. D'abord, il y a eu MFC et VB6, puis Windows Forms, et maintenant WPF. De même, avec .NET, les versions de Windows ont été progressivement rayées de la liste de support. Il semble que WPF pourrait être là pour rester pendant un certain temps, mais comme il n'est pas open source, il est vraiment entre les mains de Microsoft. Je suis également préoccupé par les frais généraux et les performances de WPF, car certaines de nos applications impliquent le traitement de grandes quantités d'informations et la capture de données en temps réel. Qt semble être une très bonne option, mais il ne dispose pas de toutes les fonctionnalités de WPF/.NET.

En fait, que pense la communauté de l'engagement de Microsoft envers WPF par rapport aux frameworks précédents ? Les considérations de performance sont-elles suffisamment importantes pour éviter de l'utiliser pour une application en temps réel ? Et, dans quelle mesure les avantages de WPF/.NET en termes de productivité et de fonctionnalités sont-ils significatifs par rapport à Qt ?

140voto

Alan Points 7273

Si la pérennité de votre système est une préoccupation majeure, j'envisagerais sérieusement de développer en utilisant le framework Qt.

Il utilise une approche moderne du développement d'interfaces C++ (par rapport aux MFC) et possède le facteur de surprise supplémentaire d'être multiplateforme (la popularité d'Apple/Linux ne cesse de croître).

Avec le soutien de Nokia, on peut également s'attendre à une bonne prise en charge des appareils portables, un secteur en pleine expansion.

Je ne pense pas que C#/.Net va disparaître de sitôt, mais beaucoup de gens ont prédit la fin de C++ depuis des années et il est toujours aussi fort.

89voto

CMircea Points 2037

La licence GNU LGPL ne vous oblige pas à partager un quelconque code, pas même lors de l'édition de liens statiques. C'est une idée reçue - il suffit de fournir un moyen pour l'utilisateur de lier sa propre copie de Qt avec votre application et de la déboguer ; les DLLs fournissent déjà cela, avec la liaison statique vous pouvez fournir des fichiers objets.

Qt offre des fonctionnalités EXTENSIVES pour toutes les plateformes prises en charge. Les plus importantes qui me viennent à l'esprit sont les API Qt Concurrent et threading, WebKit, Qt script et bien sûr, Qt GUI. Le fait que le C++ soit en train de mourir est dû au fait que la plupart des gens considèrent le C++ comme le code de merde qui flotte partout, écrit en utilisant uniquement des API natives de bas niveau, MFC ou des bibliothèques/outils similaires. Qt est un cadre de développement moderne et stable qui existe depuis très longtemps. Nokia ne l'a pas acquis uniquement pour ses appareils, car ces derniers ne sont tout simplement PAS assez puissants pour gérer les fonctionnalités avancées de Qt, notamment Qt WebKit - WebKit lui-même est vraiment très gourmand et n'est pas destiné au développement embarqué.

Qt gagne constamment en fonctionnalités. Par exemple, la 4.5 a apporté un portage Cocoa, XSLT, ODF. Elle a également apporté un nouveau moteur matriciel qui est, tenez-vous bien, STUPIDEMENT RAPIDE, ainsi qu'un moteur OpenGL (ES) 2.0 pour les graphiques accélérés par le matériel. 4.6 a apporté un cadre d'animation, une machine à états, et un moteur JavaScript EXTRÊMEMENT rapide hérité de WebKit, pour WebKit lui-même et Qt script - SquirrelFish Extreme est actuellement le moteur JavaScript le plus rapide, battant le V8 de Chrome ; 4. 7 apporte la version de Qt de WPF, appelée Qt Quick, avec un langage déclaratif (QML, basé sur JavaScript), le module QtDeclarative (qui s'intègre au cadre Graphics View et dispose d'API pour lier des objets C++ personnalisés à QML), des API réseau étendues et des améliorations au module WebKit (et une mise à jour du code WebKit).

Que propose WPF comme widget de navigateur ? Trident. Merci beaucoup, pour l'instant Trident est l'un des moteurs les plus lents à tous points de vue, bien que j'ai entendu dire que des travaux sont en cours pour améliorer considérablement les performances. Tout un choix pour se tirer une balle dans le pied lorsque vous voulez porter votre logiciel à un autre programme, en particulier le marché en croissance rapide des appareils embarqués - vous êtes fondamentalement verrouillé à Windows CE/Mobile, alors que Qt a été porté à Windows CE/Mobile, Embedded Linux, Symbian S60 et Maemo est à venir. Qt a le support de plateforme le plus étendu que j'ai vu - voir la liste dans la documentation de Qt .

Même si Qt fournit des API de très haut niveau, il est TRÈS rapide, et lorsque la vitesse est critique, il vous permet d'aller aussi bas que vous le souhaitez, potentiellement jusqu'à l'assemblage. Les widgets étrangers fournissent un rendu rapide sans scintillement, mais vous êtes libre de demander un widget natif - il suffit de définir un drapeau. Pour la programmation concurrente, vous disposez de primitives de threading comme les mutex, les verrous en lecture-écriture, les conditions d'attente, les sémaphores, ainsi que des APIS de plus haut niveau - les pools de threads par exemple, en terminant par Qt Concurrent. Les signaux et les slots sont un moyen inestimable de faire passer des données entre des objets de manière thread-safe sans aucun verrouillage, en s'appuyant sur la boucle d'événement pour délivrer en toute sécurité tous les événements et signaux.

Qt est extensible à souhait. Vous pouvez sous-classer pratiquement toutes les classes, et si de cette façon vous ne pouvez pas effectuer une opération, vous disposez du code source complet pour toutes les plates-formes et des droits pour le modifier selon vos besoins sur toutes les options de licence. De plus, Qt garantit une compatibilité binaire ascendante entre les versions mineures et une compatibilité binaire ascendante ET descendante entre les versions de patch (bien sûr, le code dépendant d'un bug corrigé ne fonctionnera pas sur les versions avec le bug ; X.Y.Z --> X = majeur ; Y = mineur ; Z = patch). Des outils sont également fournis pour passer gracieusement aux révisions majeures à votre propre rythme : Qt 4 inclut un outil pour migrer le code Qt 3 vers le code Qt 4 ET un module de support Qt 3, implémentant toute l'API Qt 3 (sauf si la version Qt 4 de la classe est entièrement compatible avec l'ancienne), ainsi votre ancien code est toujours sûr.

Je soutiens que Qt est un cadre de développement d'applications, contrairement à WPF qui n'est qu'une partie GUI de .NET. Qt comprend de nombreux modules non GUI : Core, Network, SQL, XML, script, et plus encore. Tous fournissent à la fois des API de bas niveau (QIODevice, QTcpSocket) et des API de haut niveau (QTextStream, QNetworkAccessManager). La documentation est une partie subjective, mais à mon avis je pense qu'elle est très bonne et étendue, et quand la documentation ne suffit pas, la communauté est toujours là pour aider, ainsi que les contrats de support de Nokia.

P.S. : Je n'ai aucune expérience de .NET, je viens d'expliquer pourquoi je pense que Qt est souvent un bien meilleur choix que .NET. Il y a des exceptions à tout et .NET excelle également dans de nombreux domaines ; rien n'est parfait, il faut choisir le bon outil pour le travail. J'ai essayé d'énumérer tous les avantages de Qt auxquels je peux penser et pourquoi c'est une excellente boîte à outils. Veuillez consulter la documentation de Qt à l'adresse http://qt.nokia.com/doc/4.6/index.html pour tous les détails et rappelez-vous que Qt est une boîte à outils, elle comprend plusieurs outils : Qt Creator (IDE), Qt Designer (concepteur d'interface graphique), qmake (système de construction), Qt Linguist (traducteur) pour n'en citer que quelques-uns.

61voto

gbc Points 4019

Il y a deux ans, je faisais migrer un Visual Basic 6 et je devais choisir entre Qt et WPF. Si j'avais choisi Qt, c'était pour travailler avec Python et les bindings PyQt. Après avoir travaillé avec les deux pendant un mois, j'ai fini par choisir WPF en raison des coûts de licence. À l'époque, Qt ne proposait que la licence GPL ou une licence commerciale payante (qui était assez chère) et la licence PyQt était un coût supplémentaire. Avec une option LGPL pour la licence Qt, la décision aurait été différente.

En termes de vitesse, j'ai trouvé Qt et WPF suffisamment rapides et, du point de vue de l'utilisateur final, il n'y a pas de raison perceptible de privilégier l'un plutôt que l'autre.

Qt avec PyQt était une façon très productive et amusante de construire des applications. Les bibliothèques Qt sont très bien conçues et donnent l'impression d'un code qui a été peaufiné au cours d'une longue période d'utilisation dans le monde réel, ce qui est logique étant donné son histoire. La documentation est bonne, bien que la prise en charge des outils soit loin d'être aussi bonne que celle de Visual Studio (lorsque j'utilise PyQt, je ne peux pas parler pour C++), mais le fait de disposer de bibliothèques bien pensées et d'un langage concis élimine en grande partie le besoin d'outils plus sophistiqués.

Contrairement à certains des autres commentaires, j'ai trouvé que WPF était également agréable à utiliser. La liaison déclarative entre votre logique métier et les modèles de présentation réduit considérablement le code standard et permet une séparation nette entre le modèle et la vue. Il dispose de quelques fonctionnalités intéressantes comme la liaison thread-safe et une bibliothèque 3D simple à utiliser. D'un autre côté, Qt peut égaler ces caractéristiques et il est multiplateforme. En outre, WPF a quelques aspérités et la documentation peut être clairsemée, beaucoup de réponses aux bizarreries ne peuvent être trouvées que dans la mer d'articles de blog et de commentaires de forum.

Compte tenu du changement des conditions de licence, si je devais faire le même choix aujourd'hui, j'irais de l'avant avec Qt (et Python pour moi, car je ne suis pas assez héroïque pour écrire en C++). Mais WPF nous traite bien et c'est toujours un plaisir de travailler avec lui, donc je ne peux pas dire que c'est un mauvais choix.

46voto

KeyserSoze Points 2103

Il existe des liaisons Qt pour Python, C#, Ruby, Java, Ada, Pascal, Perl, PHP, et Haskell Cependant, ils ne sont pas supportés par Trolltech (ou maintenant Nokia), et je n'ai aucune idée s'ils fonctionnent bien du tout.

Malgré cela, je préfère utiliser C++ avec Qt, plutôt que ce que Microsoft propose actuellement. Vous pouvez faire tourner Qt sur tous les OS de bureau populaires, et avec les conditions de licence, même si Nokia fait faillite ou vend Qt, vous avez todo le code source. Vous pouvez le maintenir vous-même si vous en avez besoin, et le modifier comme vous le souhaitez, il vous suffit de mettre vos modifications du code source des bibliothèques Qt à la disposition de tous ceux à qui vous donnez des binaires.

37voto

Kensai Points 785

En lisant vos préoccupations dans votre message initial, aaronc, je dois dire que vous répondez presque à la question par vous-même. Le bon chemin à suivre est certainement Qt .

L'année écoulée a été une véritable révolution pour Qt. Tout d'abord, l'acquisition de Trolltech par Nokia (garantissant les fonds de développement pour les années à venir...), puis la nouvelle licence (LGPL), et enfin et surtout l'ouverture complète du code source et l'approche amicale d'une feuille de route démocratique.

Je ne veux pas insinuer qu'ils sont des saints, Qt Software est également une société à but lucratif. Néanmoins, ils investissent massivement dans de nouveaux outils faciles à utiliser et à l'épreuve du code pour les futurs portages multiplateformes. Avez-vous vu le nouveau Créateur Qt ? Tout simplement incroyable.

La boîte à outils Qt est très solide et elle est enrichie en permanence. Consultez les nouvelles Démonstrations de widgets intégrés y el Interface utilisateur déclarative . De cette façon, vous êtes même couvert pour les éléments de type WPF.

Mon conseil est donc le suivant Qt tout le chemin...

Bonne chance !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X