111 votes

wxWidgets vs Qt

Quelle est votre expérience avec les cadres wxWidgets y Qt ? Lequel utiliser et pourquoi ?

106voto

Zeke Points 1074

J'ai de l'expérience avec les deux, mais plus avec Qt qu'avec wxWidgets.

Le problème avec wxWidgets est qu'il essaie d'être plus comme MFC wxWidgets a été créé pour aider les utilisateurs de MFC à migrer plus facilement vers un cadre GUI meilleur et moins bogué. Ainsi, wxWidgets a en fait hérité de beaucoup des mauvaises choses que MFC avait. Et ce que vous avez obtenu est wxWidgets.

wxWidgets croit toujours en la possibilité de faire fonctionner le framework sur Windows 95, Windows 98, Windows 2000, etc. Ils proposent toujours un choix entre ANSI et Unicode. Ce qui, à mon avis, est stupide car personne, à mon avis, ne vit encore dans un monde qui ne tourne qu'autour de l'ANSI. Ce devrait être Unicode et seulement Unicode.

La construction de wxWidgets est au mieux compliquée. Vous devez modifier un fichier d'en-tête pour activer des fonctionnalités et même cela est mal documenté et accablant.

La plupart des classes manquent de fonctionnalité. Il n'y a pas de support de proxy dans la bibliothèque de socket, peu de notifications et si vous devez le faire, il est plus que probable que vous deviez le faire vous-même (ce qui est terrible à mes yeux).

Vous devez toujours gérer les enums pour savoir ce qui est quoi. Comme IDL_ITEMVIEW comme vous le feriez dans l'API Win32 et MFC.

La documentation n'est pas aussi bonne, il est difficile de s'y retrouver.

La conception est basée sur Dev-C++ qui était un IDE horrible et qui n'a jamais été entretenu du tout. Bien qu'il l'améliore un peu, il manque toujours quelque chose de valable à utiliser. Il a également hérité des mauvaises choses comme l'absence de complétion de code, un mauvais débogueur, un éditeur laid. Mais il a ajouté un bon concepteur pour wxWidgets. Mais AFAIK pas de support pour Linux ou Mac.

Les bons points de wxWidget sont qu'il fonctionne sur toutes les plates-formes, et si vous utilisez MFC et aimez les cartes de messages et avez toujours besoin de supporter les vieux OS comme je l'ai dit ci-dessus, optez pour wxWidgets.

Qt a suivi sa propre voie et n'a jamais suivi la même direction que MFC, car il a été lancé bien avant l'existence de MFC (AFAIK) et ne fonctionnait pas sous Windows à l'époque, mais uniquement sous Linux. Qt utilise une chose appelée MOC (Meta Object Compiler). Ne considérez pas Qt comme son propre langage, tout est toujours fait en C++. MOC a été conçu pour la réflexion. Pour savoir de quelle classe il s'agit, il faut obtenir le nombre de fonctions dans la classe et tout le reste. Qt a inventé le système de signaux et de slots que vous voyez en Boost y GTK . Qt est ce qu'on appelle un cadre GUI basé sur les événements.

Lorsqu'un utilisateur clique sur un bouton, il envoie un message (signal) et le slot connecté au signal reçoit cet événement et y répond. C'est un type sûr, vous n'avez pas à vous inquiéter d'une erreur. Il n'appellera simplement pas le slot invalide et signalera l'erreur pour vous le faire savoir.

Qt a une application de conception qui est juste comme wxWidgets dans Dev-C++. Mais il vous permet de créer des signaux dans celui-ci, large gamme de widgets à utiliser. Vous pouvez même créer un plugin de widget et mettre vos propres widgets dans le designer et les faire glisser sur le formulaire et le voir en temps réel. Vous pouvez voir le code qu'il génère (via MOC) et sortir un C++ 100% valide. wxWidgets ne fait pas cela. Je ne me souviens plus comment il gère ses unités de conception. Lors de la prévisualisation de la conception, vous pouvez changer l'apparence et tous ses styles pour voir comment cela va se passer et faire des changements en fonction de ce que vous pensez être le mieux adapté.

Qt a aussi d'autres applications, une application de traduction pour traduire vos applications. Qt-Creator, l'IDE pour Qt qui supporte la complétion de code, Subversion, Git, CVS (je pense), et autres. Il dispose d'un concepteur intégré. Ainsi, vous pouvez travailler dans l'IDE seul et tout le reste.

Qt est livré avec de nombreux modules. Allant de SQL, réseau, XML, XSLT/XPath, à WebKit . Même le support COM (qui ne fonctionne que sous Windows). Avec QtActive, vous pouvez créer des plugins Qt pour Internet Explorer si vous le souhaitez. Il y a aussi QtScript qui vous permet d'ajouter des scripts à votre application via JavaScript si vous le souhaitez. Il dispose même d'un débogueur IDE pour cela.

Le code de Qt est très cohérent en termes de codage et de conception. Il possède son propre système de construction appelé QMake. Il fonctionne sur Mac, Unix, Linux et Windows. Je ne l'ai pas vraiment utilisé, sauf pour des cas de test. J'utilise CMake qui est, à mon avis, bien meilleur.

La configuration de Qt se fait en ligne de commande de manière similaire à autotools configure. La plupart des modules Qt peuvent être désactivés comme il se doit.

Qt fait l'objet de nombreux ouvrages. Et très à jour, contrairement au livre sur wxWidgets qui a été écrit pour la dernière fois dans une version très ancienne de wxWidgets.

Il existe également une autre application fournie avec Qt. Elle s'appelle Qt Demo, qui vous permet également d'exécuter tous les exemples et applications de démonstration qui montrent ce que Qt peut faire. Il y en a plus de 100 (estimation). Il est entièrement documenté et vraiment facile à suivre.

Si vous lisez des commentaires d'autres personnes qui se plaignent du MOC et de son caractère néfaste, je ne les écouterais pas. Pensez à la MOC comme ceci. Si vous utilisez le module QtScript, vous pouvez facilement baser les données en avant et en arrière sans aucune complexité contrairement à ce que vous auriez à faire si vous étiez dans une application C++ normale avec Boost::Python par exemple. Jetez un coup d'œil sur le site de KDE 4 Kross bibliothèque. Une grande partie de ce travail est effectuée par ce que MOC peut faire.

Qt a été créé par Trolltech et a ensuite été vendu à Nokia pour plus de support sur les téléphones mobiles, il fonctionne même dans les systèmes embarqués des voitures. Je ne pense pas que wxWidgets puisse faire cela, mais je peux me tromper. Le fait que Qt soit racheté par une grande entreprise comme Nokia montre qu'il ne mourra probablement jamais, car la demande de Qt pour les téléphones et les systèmes embarqués augmente. Avec wxWidgets, c'est fait par les développeurs (je n'ai rien contre). Il mourrait sans prévenir. Si Nokia disparaissait, le contrôle serait donné à KDE. Mais cela n'arrivera probablement jamais.

Qt est conçu de manière professionnelle, contrairement à wxWidgets. Nokia a même ouvert son dépôt pour permettre aux utilisateurs d'y ajouter des fonctionnalités et de l'aider. Qt est donc conçu par des professionnels et par la communauté.

57voto

NuSkooler Points 2679

Il y a beaucoup de bonnes raisons de choisir l'une ou l'autre de ces boîtes à outils. Vous devez peser le pour et le contre et décider ce qui vous convient le mieux pour le projet en question . Pour la majorité des projets dans lesquels j'ai eu besoin d'une interface graphique pour l'utilisateur final, j'ai choisi wxWidgets.

L'article de Zeke semble répandre beaucoup d'informations erronées sur wxWidgets, c'est pourquoi je vais me concentrer sur cet aspect :

  • Le site Licence wxWidgets est très équitable pour les travaux non commerciaux et commerciaux :

La Licence wxWindows est essentiellement la L-GPL (Library General Public) Licence), avec une exception stipulant que les travaux dérivés sous forme binaire peuvent être distribuées selon les conditions de l'utilisateur. Il s'agit d'une solution qui satisfait ceux qui souhaitent produire des logiciels sous licence GPL en utilisant wxWidgets, et aussi ceux qui produisent des logiciels propriétaires.

  • wxWidgets crée des binaires à l'aide d'un fichier apparence native . Je ne veux pas dire émulation, mais natif. Cela inclut tous les effets fantaisistes tels que ceux que l'on trouve dans Windows Aero - parce que là encore, c'est natif. QT s'en approche, mais pas tout à fait. Jetez un coup d'œil à la galerie officielle de widgets QT. .

  • wxWidgets supporte l'Unicode depuis un certain nombre d'années maintenant. J'ai personnellement été impliqué dans des projets utilisant wxWidgets dans des constructions Unicode localisées dans de nombreuses langues. À partir de la version 2.9 Unicode est la valeur par défaut .

  • Je ne sais pas d'où vient la remarque sur la difficulté de construire des wxWidgets. Il n'y a certainement pas d'en-têtes à modifier, à moins que vous ne fassiez une personnalisation non standard très poussée. Sous Windows, vous pouvez utiliser les solutions Visual Studio fournies ou utiliser nmake. Configuration et construction standard sur *nix.

  • La documentation a toujours été bon mais el dernière documentation est très propre . Bien sûr, certains domaines pourraient être améliorés, mais il y a beaucoup de forums , listes de diffusion et même un livre officiel disponible. La communauté est prompte à réagir et il existe de nombreux échantillons pour vous aider à démarrer.

  • De nombreux IDE sont disponibles . Honnêtement, l'interface utilisateur est si simple à utiliser que je le fais généralement à la main. Les sizers font de la mise en page un jeu d'enfant. wxWidgets ne dispose pas d'un concepteur d'interface graphique officiel comme le fait QT, cependant.

  • Bien que je convienne que un peu de Certaines parties de wxWidgets étaient de type MFC dans le passé, les versions actuelles utilisent des approches plus modernes. Les interfaces utilisateur peuvent être écrites à l'aide d'éditeurs de type "glisser-déposer", de XML ou à la main. (facilement, même !). Les widgets peuvent communiquer via des liaisons d'événements ou, si vous le souhaitez vraiment, vous pouvez toujours utiliser des tables d'événements et des macros.

  • wxWidgets peut être construit (et je recommande de le faire !) pour utiliser la STL comme cheval de bataille d'un grand nombre de classes sous-jacentes . En plus de cela, elle a emprunté des paradigmes (et s'intègre bien) avec Boost en 2.9+. STL et (et Boost, selon la situation) sont probablement des choses que vous devriez utiliser de toute façon dans le développement C++ moderne.

  • Les wxWidgets peuvent être construits en tant que bibliothèques statiques ou objets partagés/DLL. Ils sont divisés par concepts afin que vous puissiez n'expédiez facilement que ce dont vous avez besoin . Si vous le souhaitez vraiment, il est trivial de désactiver la compilation de certaines portions si vous voulez réduire davantage la taille des binaires.

  • Vous ne voulez pas coder en C++ ? Utilisez l'un des beaucoup d'autres liaisons de langues disponibles, comme le très populaire wxPython . Quelques exemples récents d'applications wxPython sont les applications Dropbox et Google Drive applications client.

Encore une fois, et je ne saurais trop insister sur ce point : Prenez le temps d'évaluer vous-même les deux boîtes à outils et décidez de ce qui convient le mieux au projet sur lequel vous travaillez à ce moment-là. Ce qui peut convenir à un projet A ne convient pas nécessairement à un projet B.

Mise à jour : Nokia vendrait Qt peut être quelque chose à garder à l'œil également.

42voto

dalid Points 413

Je vote pour les wxwidgets :

  • apparence native du système d'exploitation
  • plus proche de MFC : si vous êtes un programmeur MFC, vous le trouverez similaire et facile à apprendre
  • open source et licence moins restrictive que QT
  • Le module exécutable est plus petit que QT
  • wxwidgets 2.9 (version pré-3) possède une interface graphique impressionnante, comme le ruban de Ms Office 2007.
  • wxwidgets est bien structuré que QT
  • plus de construction ANSI dans la version 2.9
  • support pour les appareils mobiles

30voto

liquidblueocean Points 474
  • Qt = restrictions de licence et parfois coût

    + wx = libre

  • Qt = compilateur supplémentaire requis, ce qui ajoute à la complexité de la construction et aux problèmes d'intégration.

    + wx = code source c++, à utiliser à votre guise partout.

  • Qt = vous devez distribuer leurs bibliothèques

    + wx = comme vous voulez

  • Qt = propriété d'une seule entreprise

    + wx = propriété de la communauté

  • Les deux ont de bonnes communautés de soutien, des livres, beaucoup d'applications différentes pour les concepteurs d'interface utilisateur.

  • Les deux ont des composants non-GUI pour le threading, les bases de données, XML, ActiveX, etc.

13voto

zooropa Points 1602

J'ai de l'expérience avec wxWidgets mais pas avec Qt. Ce sont deux bibliothèques de widgets GUI multiplateformes qui font un excellent travail. Même si wxWidgets est un projet open source, il a de nombreux adeptes. Il existe une documentation abondante et un livre sur le sujet. Le site libro est idéal pour se mettre à niveau. Vous ne mentionnez pas le type de projet que vous souhaitez réaliser. J'ai utilisé wxWidgets pour des outils et des applications plus importantes. Si vous allez sur le site Site web de wxWidgets vous pouvez voir certains des programmes construits avec wxWidgets. Il y a quelques programmes impressionnants. L'une de ces applications est Audacity. C'est un outil audio très populaire. Je pense que l'un des inconvénients de l'utilisation de l'une ou l'autre bibliothèque est que vous n'aurez pas nécessairement le support des dernières et des meilleures fonctionnalités de l'interface graphique. Je ne pense pas que wxWidgets prenne en charge certaines des dernières fonctionnalités de l'interface graphique de Win 7. Mais, si vous visez une solution multiplateforme, vous ne voudrez pas de toute façon de ces types de fonctionnalités puisqu'elles ne seront pas portées sur les autres plateformes.

Désolé, je ne peux pas comparer et contraster avec Qt, mais j'espère que cela vous donne une meilleure compréhension de wxWidgets. 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