155 votes

QT versus WPF/.NET

Mon entreprise est d'essayer de faire un choix entre l'utilisation de Qt/C++ pour notre GUI cadre ou de la migration vers .NET et l'utilisation de WPF. Nous avons jusqu'à présent été à l'aide de MFC. Il semble que .NET/WPF est techniquement le plus avancé et riche en fonctionnalités de la plateforme. Je ne, cependant, ont plusieurs préoccupations. Elles comprennent:

  • Support de plate-forme
  • Cadre de la longévité (c'est à dire l'épreuve de l'avenir)
  • La Performance et les frais généraux

Pour cette application, nous sommes prêts à sacrifier pour Windows 2000, Mac, et Linux. Mais, le problème est plus lié à l'engagement de Microsoft pour le cadre et pour les plates-formes existantes. Il semble que Microsoft a une mauvaise habitude de venir avec quelque chose de nouveau, tout un cinéma pendant quelques années, puis de les reléguer dans les déchets-bin essentiellement abandonner les développeurs qui l'ont choisi. Il a d'abord MFC et VB6, puis Windows Forms, et maintenant, il y a WPF. Aussi avec .NET, les versions de Windows ont été progressivement détourné au large de la liste de soutien. Il ressemble à WPF pourrait être ici pour rester pendant un certain temps, mais depuis qu'il n'est pas open source, il est vraiment dans Microsoft mains. Je suis également préoccupé par la surcharge et les performances de WPF car certains de nos applications impliquent le traitement de grandes quantités d'informations et de faire en temps réel de capture de données. Qt semble être une très bonne option, mais il n'a pas toutes les fonctionnalités de WPF/.NET.

Fondamentalement, ce que pense la communauté de l'engagement de Microsoft à WPF par rapport aux cadres? Sont les facteurs de performance suffisamment importante pour éviter de l'utiliser pour un temps réel de l'application? Et, quelle est l'importance des avantages de WPF/.NET en termes de productivité et de fonctionnalités par rapport à Qt?

140voto

Alan Points 7273

Si la future proofing votre système est une préoccupation majeure, alors je voudrais envisager sérieusement de développement avec le framework Qt.

Il utilise une approche moderne de C++, développement de l'interface (par rapport à la MFC) et a la wow facteur de croix-plate-forme (Apple/Linux popularité continue de croître).

De Nokia, la sauvegarde, vous pouvez également s'attendre à un bon support pour les dispositifs tenus dans la main de nouveau, une industrie qui se développe rapidement.

Je ne pense pas que C#/.Net sera pour demain, cependant, beaucoup de gens ont prédit C++de disparition depuis des années maintenant et il est toujours en cours forte.

89voto

CMircea Points 2037

La GNU LGPL ne vous forcent pas à partager le code, pas même lorsque la liaison statique. Il est une croyance commune - vous avez juste à fournir un moyen pour l'utilisateur de faire le lien entre leur propre copie de l'intervalle Qt avec votre application et de débogage; Dll déjà fournir cette, avec la liaison statique vous pouvez fournir des fichiers de l'objet.

Qt fournit de nombreuses fonctionnalités pour toutes les plateformes prises en charge. Le plus grand qui viennent à mon esprit sont Qt Simultanées et le filetage Api, WebKit, Qt Script et bien sûr, Qt GUI. Le fait que le C++ est en train de mourir est parce que la plupart des gens pensent de C++ comme de la merde code flottant autour de l'écrit à l'aide de seulement natif de bas niveau Api, MFC ou similaires bibliothèques et des outils. Qt est un établissement moderne et stable cadre de développement qui a été autour pendant un temps très long. Nokia n'a pas acquis de leurs appareils, depuis leurs appareils sont tout simplement PAS assez PUISSANT pour gérer l'avancée de l'intervalle Qt, notamment Qt WebKit - WebKit lui-même est vraiment un porc et n'est pas ciblée sur le développement embarqué.

Qt est toujours plus de fonctionnalités. Par exemple 4.5 apporté un Cacao port, XSLT, ODF. Il a aussi apporté un nouveau moteur raster qui est, obtenir ce, BÊTEMENT RAPIDE, ainsi qu'un OpenGL (ES) 2.0 moteur pour l'accélération graphique matérielle. 4.6 a apporté une animation cadre, une machine d'état, et d'une manière EXTRÊMEMENT rapide moteur JavaScript hérité de WebKit, pour WebKit lui-même et Qt Script - SquirrelFish Extrême est actuellement à jeun moteur JavaScript, en battant Chrome V8; 4.7 apporte de Qt version de WPF, appelé Qt Quick, avec un langage déclaratif (QML, basé sur JavaScript), QtDeclarative module (qui s'intègre avec la Vue Graphique cadre et a des Api pour lier personnalisé des objets C++ pour QML), étendue des Api de réseau et l'amélioration de l'WebKit module (et mis à jour WebKit code).

Ce n'WPF fournir un navigateur widget? Trident. Merci beaucoup, pour l'instant, le Trident est l'un des plus faibles des moteurs dans tous les aspects, même si j'entends que le travail est en cours afin d'améliorer considérablement les performances. Tous un bon choix pour se tirer dans le pied lorsque vous souhaitez porter votre logiciel à un autre programme, notamment la croissance rapide du marché des périphériques intégrés - vous sont fondamentalement verrouillé pour Windows CE/Mobile, alors que Qt a été porté sous Windows CE/Mobile, Linux Embarqué, Symbian S60 et Maemo est à venir bientôt. Qt est la plus importante plate-forme de soutien que j'ai vu - voir la liste dans la documentation de Qt.

Même si Qt fournit quelques très haut niveau de l'Api, il est TRÈS rapide, et quand la vitesse est essentielle, elle permet d'aller aussi bas niveau que vous voulez, peut-être même de l'assemblée. Alien widgets fournir scintillement moins un rendu rapide, cependant, vous êtes libre de demander un natif widget - il suffit de mettre un drapeau. Pour la programmation simultanée vous avez des primitives de thread comme mutex, verrou en lecture / écriture, les conditions d'attente, les sémaphores, ainsi graduellement de plus haut niveau de l'API - pools de threads par exemple, se terminant avec Qt Simultanées. Les signaux et les slots sont un précieux moyen de transmettre des données entre les objets dans un "thread-safe", sans verrouillage, en s'appuyant sur la boucle d'événements pour fournir de façon sécuritaire tous les événements et les signaux.

Qt est extensible comme l'enfer. Vous pouvez sous-classe pratiquement toutes les classes, et si de cette façon vous ne parvenez pas à effectuer une opération, vous sont fournis avec leur code source complet pour toutes les plates-formes et des droits de la modifier pour vos besoins sur toutes les options de licence. En outre, Qt garanties en arrière la compatibilité binaire entre les versions mineures et en avant ET en arrière la compatibilité binaire entre les patch versions (bien sûr, le code en fonction d'une correction de bug ne fonctionne pas sur les versions avec le bug; X. Y. Z --> X = grand; Y = mineur; Z = patch). Des outils sont également fournis gracieusement déplacer des révisions importantes à votre propre rythme: Qt 4 comprend un outil permettant de migrer Qt 3 du code de Qt 4 code de Qt 3 module de prise en charge, la mise en œuvre de l'ensemble de l'intervalle Qt 3 de l'API (à moins que l'intervalle Qt 4 version de la classe est entièrement compatible avec l'ancien), ainsi que votre ancien code est toujours en sécurité.

Je soutiens que Qt est un framework de développement d'applications, à la différence de WPF qui est juste une partie GUI de .NET. Qt inclut de nombreux non-GUI modules: de Base, de Réseau, SQL, XML, Script, et plus encore. Tous fournissent à la fois un faible niveau de l'Api (QIODevice, QTcpSocket) et de haut niveau de l'Api (QTextStream, QNetworkAccessManager). La documentation est une partie subjective, mais à mon avis je crois que c'est très bon et vaste, et si la documentation n'est pas assez, la communauté est toujours là pour l'aider, ainsi que Nokia contrats de support.

P. S.: je n'ai pas tout .NET de l'expérience, j'ai juste dit pourquoi je crois que Qt est souvent un bien meilleur choix .NET. Il y a des exceptions à tout .NET excelle dans de nombreux domaines ainsi; rien n'est parfait, vous devez choisir le bon outil pour le travail. J'ai essayé de faire la liste de tous les avantages de l'intervalle Qt je pense, et pourquoi c'est une grande trousse. Veuillez consulter la documentation de Qt à http://qt.nokia.com/doc/4.6/index.html pour tous les détails et n'oubliez pas que Qt est une boîte à outils, elle comprend plusieurs outils: Qt Creator (IDE), Qt Designer (GUI designer), qmake (système de construction), Qt Linguist (traducteur) pour n'en nommer que quelques-unes.

61voto

gbc Points 4019

Il y a deux ans j'étais à la migration d'un Visual Basic 6 application et devait décider entre Qt et WPF. Si j'avais choisi de Qt, il aurait été de travailler avec Python et PyQt liaisons. Après avoir travaillé à la fois pour un mois, j'ai fini par choisir WPF en raison de coûts de licence. À l'époque, Qt seulement offert GPL ou payante licence commerciale (ce qui était assez cher) et le PyQt de licence a un coût supplémentaire. Avec un LGPL option pour le Qt de licence, la décision aurait été différente.

En termes de vitesse, je l'ai trouvé à la fois Qt et WPF assez vite, et à partir d'une perspective de l'utilisateur final il n'y a pas de raison perceptible en faveur de l'un sur l'autre.

Qt avec PyQt a été très productive et de façon amusante de créer des applications. Les bibliothèques Qt est très bien pensée et avoir le sens du code qui a été poli sur une longue période d'utilisation dans le monde réel, ce qui est logique compte tenu de son histoire. La documentation est bonne, mais le support de l'outil n'était pas aussi belle que Visual Studio (lors de l'utilisation de PyQt, je ne peux pas parler pour le C++), mais en ayant bien pensé bibliothèques et une langue concise élimine beaucoup de la nécessité pour les amateur d'outils.

Contrairement à certains des autres commentaires, j'ai trouvé WPF pour être amusant à utiliser. Le déclaratif de liaison entre une logique d'entreprise et la présentation de modèles réduit de beaucoup de code réutilisable et permet une séparation nette entre le modèle et la vue. Il a quelques fonctionnalités intéressantes comme thread-safe de liaison et d'un simple-à-utilisation de la 3D de la bibliothèque. D'autre part, Qt peuvent correspondre à ces caractéristiques, et il est multi-plateforme. En outre, WPF ne avoir des bords rugueux et la documentation peuvent être dispersés, beaucoup de réponses à des bizarreries ne peuvent être trouvés dans la mer de messages de blog et les commentaires du forum.

Compte tenu de la modification des termes des licences, si je devais faire le même choix aujourd'hui, je voudrais aller de l'avant avec Qt (et Python pour moi parce que je ne suis pas assez de héros pour écrire en C++). Mais, WPF est de nous traiter ainsi et toujours un plaisir de travailler avec, donc je ne peux pas dire que c'est un mauvais choix.

46voto

KeyserSoze Points 2103

Il y a des bindings Qt pour Python, C#, Ruby, Java, Ada, Pascal, Perl, PHP, et Haskell, cependant, ils ne sont pas pris en charge par Trolltech (ou aujourd'hui, Nokia), et je n'ai aucune idée si ils travaillent bien à tous.

De même, je préfère utiliser le C++ avec Qt, que ce que microsoft pousse maintenant. Vous pouvez exécuter Qt sur chaque bureau populaire système d'exploitation, et avec les termes de la licence, même si Nokia va faillite ou vend Qt, vous avez eu tout le code source. Vous pouvez gérer vous-même si vous en avez besoin, et de le modifier comme vous l'aimez, vous avez juste besoin de faire vos modifications de code source pour les bibliothèques Qt à la disposition de quiconque vous donner binaires.

37voto

Kensai Points 785

La lecture de vos préoccupations dans votre post initial, aaronc, je dois dire que vous avez presque répondu à la question pour vous-même. La bonne façon de faire est certainement de Qt.

Cette année écoulée a été une véritable révolution pour Qt. D'abord le Nokia acquisition de Trolltech (obtention de fonds de développement pour les années à venir...), puis la nouvelle licence (LGPL), et dernier mais pas moins l'ouverture complète du code source et l'approche amicale de la démocratie et de la feuille de route.

Je ne veux pas dire qu'ils sont saints, Qt Software est une société à but lucratif. Neverthess ils investissent massivement dans de nouveaux outils que sont le code-preuve pour l'avenir de la croix-plate-forme de portage. Avez-vous vu la nouvelle Qt Creator? Tout simplement incroyable.

La bibliothèque Qt est très forte et ils l'enrichissent en permanence. Découvrez la nouvelle application intégrée des Démos et le Déclaratif de l'INTERFACE utilisateur. De cette façon, vous êtes encore couvert pour WPF-comme des choses.

Donc, mon conseil est de 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