Commentaires
Réponse
Je nai pas vraiment lintention que ce soit une réponse dénigrante, mais ce sont les raisons pour lesquelles je le fais nutilise pas personnellement Qt. Il y a beaucoup de bonnes choses à dire à ce sujet – à savoir que lAPI fonctionne la plupart du temps et quelle fait le pont de manière transparente entre les plates-formes. Mais je nutilise pas Qt, car:
- Dans certains cas, cela ne ressemble tout simplement pas à un programme natif. La conception dune interface utilisateur unique pour toutes les plates-formes ne sera pas intrinsèquement correcte lorsquelle sera déplacée dune machine à lautre, pour diverses raisons de style visuel. Par exemple, sur les machines Mac, les barres divisées sont généralement relativement épaisses et les boutons sont petits et arrondis avec des icônes. Sur les machines Windows, les barres divisées sont généralement étroites et les boutons sont plus textuels, avec des conceptions plus carrées. Ce nest pas parce que vous pouvez écrire une interface utilisateur pour chaque plate-forme que vous devriez le faire pour la plupart des applications.
- Qt nest pas simplement un ensemble de bibliothèques C ++ pouvant être liées. Le système de construction utilisé nécessite la traduction de certains fichiers en fichiers source supplémentaires, ce qui rend le processus de construction beaucoup plus compliqué par rapport à la plupart des autres bibliothèques.
- En raison de (2), des IDE et des outils C ++ peut signaler les expressions Qt comme des erreurs, car elles ne comprennent pas les spécificités de Qt. Cela oblige presque à utiliser QtCreator ou un éditeur textuel uniquement comme
vim
. - Qt est une grande quantité de sources, qui doivent être présentes et préinstallées sur nimporte quelle machine que vous utilisez avant la compilation. Cela peut rendre la configuration dun environnement de compilation beaucoup plus fastidieuse.
- Les pièces sont pour la plupart sous licence LGPL, ce qui rend il est difficile d’utiliser un déploiement binaire unique lorsque l’on doit publier sous une licence plus restrictive ou moins restrictive.
- Il produit des binaires compilés extrêmement volumineux par rapport aux " plain ol « applications natives " (sauf bien sûr les applications writ dix pour KDE).
Commentaires
- @Dehumanizer: Là ' est le Licence LGPL, et là ' est la licence commerciale. La licence commerciale est de milliers de dollars de la part du licencié et ne permet pas la redistribution, etc. Pour les projets open source sous licences libérales comme BSD, MIT ou Boost, où les auteurs ne sont pas ' t faisant des tonnes dargent et quils souhaitent publier leur code sous une licence libérale, une dépendance à la LGPL est déraisonnable, mais les développeurs en question ne peuvent généralement pas se permettre de licences commerciales.
- # 6 est le plus grand raison pour laquelle je lévite. Je veux dire, je ' ne veux pas un gros programme maladroit, et je n’aime pas ' être lié à une licence spécifique, mais il ' est vraiment le manque dune bonne apparence native qui ' est un facteur décisif pour moi.Les versions récentes dOSX et de Windows ont en particulier fait un travail fantastique en rendant leurs interfaces natives jolies, rapides et fonctionnelles, et je ' plutôt exploiter tout le travail quelles ' ai déjà fait pour moi; Je trouve que de nombreux programmes sans aspect natif me semblent bon marché et piratés (pas toujours, mais cela métonne un peu).
- Votre numéro 6 aurait dû être le numéro 1. Cest par loin le plus gros problème avec Qt. Dans de nombreux cas, il nutilise tout simplement pas les API natives. Jaime que mon logiciel ait lair natif. Les utilisateurs aiment ça aussi. Je ' nai jamais vu une application Mac créée avec Qt qui ressemblait à une application Mac. Aucun autre utilisateur de Mac non plus, et ils ' sont pointilleux sur ce genre de choses. Vous perdez tous les avantages dêtre " multiplateforme " si vous ' lutiliser uniquement pour créer des applications Linux, ce qui est à peu près le seul endroit où il semble natif car il ny a vraiment rien de natif.
- sauf le problème du ' natif ' lapparence nest plus là. Lancienne cohérence des applications Windows est maintenant une bâtardise de tous les blobs, lueurs et animations uniques que WPF et Silverlight vous permettent davoir. Jetez un œil au panneau de configuration dOffice ou de Windows 7 ' pour voir à quel point même le produit phare de MS a une interface graphique incohérente de nos jours. Utilisateurs Mac – eh bien, vous avez un point très valable ici.
- @TrevorBoydSmith: Désolé, mais vous ' vous avez tort. Qt est le seul framework qui utilise le prétraitement. Point final. Vérifiez GNOME, FLTK, WX et amis, et montrez-moi une étape de prétraitement. Vous n’avez pas ' en trouver un. Certaines autres bibliothèques sont livrées avec différents systèmes de construction, mais en fin de compte, ce sont des bibliothèques C ++ qui peuvent être construites par nimporte quel compilateur C ++. Quant à " Raw win32 non présent dans mes motifs ", il est présent dans mes motifs comme # 5 et # 6.
Réponse
Comme on dit, chaque outil sadapte à chaque problème et situation …
Mais si vous êtes programmeur C ++, Qt est votre framework. Pas de rival.
Nous développons une application commerciale complexe dimagerie médicale, et Qt tient bon.
Je ne dis pas ça les « inconvénients » que les gens disent à son sujet sont faux, mais jai le sentiment quils nont pas essayé Qt pendant longtemps (il saméliore continuellement à chaque nouvelle version …) et, surtout, tous les problèmes quils commentent ne sont pas un problème si vous faites attention.
Incohérence de la plate-forme de linterface utilisateur: uniquement si vous utilisez les widgets de linterface utilisateur « tels quels », sans personnalisation ni illustration personnalisée.
Surcharge du préprocesseur Qt : Seulement si vous abusez du mécanisme de signal-slot, ou de lhéritage QObject, quand il ny en a pas vraiment besoin.
Au fait, nous écrivons toujours des applications en C # .NET, et avons été le faire depuis longtemps. Donc je pense avoir une perspective enouch.
Comme je lai dit, chaque outil pour chaque situation,
mais Qt est sans aucun doute un cadre cohérent et utile.
Commentaires
- +1 Thaks! Je voulais juste écrire la même chose. Le plus absurde est " argument non open source / commercial ". Étonnant, à quel point beaucoup de gens comprennent mal le terme Open-Source. Qt était Open-source depuis que je lutilise (1.4). Et il avait lhabitude davoir la licence la plus juste: gagner de largent avec Qt – > payer.
- Oh et je nai vraiment pas ' t ATTENTION à ajouter 10 Mo de DLL à une application contenant 50 Mo dart et 200 Mo de plus de didacticiels vidéo et de données 🙂
- Lespace nécessaire pour Qt est bon marché de nos jours.
- Cela correspond assez bien à mon expérience avec Qt (le framework de widgets, je nai ' pas utilisé QML / QtQuick pour quelque chose de sérieux jusquà présent). Il convient à lécriture de grandes applications avec des exigences dinterface utilisateur complexes. Une fois que vous lavez appris, vous pouvez être très productif. Les inconvénients mentionnés (étape de compilation séparée pour moc ing, fichiers ui, etc.) ne sont pas un problème si le système de construction est correctement configuré. Je peux recommander qmake ou cmake.
- à partir de Qt 5.8, il y a un projet nommé Qt Lite qui minimise extrêmement Qt pour vos besoins spécifiques. ceci est une fonctionnalité commerciale;)
Réponse
De toutes les choses que je naime pas à propos de Qt, le fait quil ne joue pas bien avec les modèles me dérange le plus. Vous ne pouvez pas faire ceci:
template < typename T > struct templated_widget : QWidget { Q_OBJECT; public signals: void something_happened(T); };
Cela ne fonctionne pas non plus bien avec le préprocesseur. Vous ne pouvez pas faire ceci:
#define CREATE_WIDGET(name,type) \ struct name ## _widget : QWidget \ { \ Q_OBJECT; \ \ public signals: \ void something_happened(type); \ }
Cela, mélangé avec le fait que tout ce qui répond à un signal doit être un Q_OBJECT, rend Qt difficile à travailler pour un programmeur C ++. Les gens habitués à la programmation de style Java ou Python sont probablement mieux en fait.
En fait, jai passé beaucoup de temps et defforts à rechercher et à concevoir un moyen de récupérer la sécurité de type et de connecter un signal Qt à nimporte quel objet foncteur: http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html
Le genre de chose que je veux faire là-bas est un développement C ++ de base, quotidien rendu pratiquement impossible par le moc Qt … qui lui-même est complètement inutile de nos jours, si jamais cela l’a jamais été.
Franchement, je suis coincé avec cela parce que si vous voulez faire des tests automatisés de l’interface utilisateur, Qt est à peu près le seul jeu en ville à court de MFC. .. qui est tellement 1980 (ça craint de travailler dans cette merde vraiment dur). Certains pourraient dire WX mais il y a des problèmes encore plus sérieux. GTKmm aurait été mon premier choix mais comme tout est dessiné par le propriétaire et ne fait pas laccessibilité … ne peut pas être piloté par un logiciel de test standard de lindustrie. Qt est assez difficile à cet égard ( à peine fonctionne lorsque vous modifiez le plugin daccessibilité).
Commentaires
- Par intérêt, quels sont selon vous les principaux problèmes avec WX?
- @Tom – documentation médiocre, en particulier pour les nouveautés. Les composants AUI sont à peine documentés avec de grandes sections manquantes, ce qui rend leur utilisation difficile dans un environnement de production. La documentation du processus événementiel est fondamentalement erronée en ce qui concerne le chemin qui est suivi, au moins sur win32. Jai passé beaucoup de temps à crier après lordinateur, " Cela devrait fonctionner !!! " avant dentrer dans le code de traitement en profondeur pour savoir que ce que fait WX nest pas ' t suivre la documentation et que ce que je faisais ne fonctionnerait JAMAIS.
- jétais également perturbé par lacceptation de la bibliothèque de grille de propriété dans la ligne principale. Jai utilisé cette bibliothèque et elle a montré de nombreux défauts de conception fondamentaux en plus dun manque réel de connaissances de la part du programmeur qui la écrite (appelées fonctions virtuelles dans les constructeurs par exemple). Elle, et le mauvais état de lAUI, ont montré une tendance à des normes plus pauvres. Je ' ne suis pas non plus un grand fan des tables dévénements statiques, même si au moins il y a ' une autre façon de répondre aux événements … contrairement à MFC, qui WX est tout simplement trop excitant de toute façon.
- Merci. Je ' ne lai quun peu utilisé, et via lAPI wxPython, où cela me paraissait plutôt sympa. Je peux comprendre que cela cacherait une partie de la perversité, mais aussi que je ne me suis ' pas suffisamment impliqué pour me heurter aux problèmes les plus graves. Quelque chose dont je dois être conscient.
- tout ce qui répond à un signal doit être un Q_OBJECT, Non de nos jours … Maintenant, les fonctions statiques, les fonctions et même les fonctions lambda peuvent répondre à un signal (vous pouvez utiliser des pointeurs de fonction comme emplacements). Les classes No-QObject peuvent également avoir des emplacements de membre si vous vous y connectez à laide dun std :: bind pour convertir le membre dinstance en un pointeur de fonction.
Réponse
Une des raisons de ne pas utiliser Qt est que si vous nécrivez que pour une seule architecture, telle que Windows, vous voudrez peut-être utiliser C # /. NET (ou Cocoa sur Mac) car ils le seront invariablement être en mesure de profiter des dernières cloches et sifflets du système dexploitation.
Si vous écrivez des applications multiplateformes, vous êtes peut-être déjà fortement investi dans une autre technologie telle que Java (cest-à-dire que vous travaillez dans une «boutique Java»). Votre choix de technologie peut être dicté par lécosystème dans lequel vous développez, comme les API spécifiques à un langage. Dans ce genre de cas, minimiser le nombre de technologies peut être bénéfique.
Une troisième raison à laquelle je peux penser est que Qt est basé sur C ++, et C ++ est un langage relativement difficile / dangereux à programmer dans Je pense que cest un langage pour les professionnels. Si vous avez besoin de performances optimales et êtes capable dêtre méticuleux, alors C ++ est probablement toujours le meilleur jeu de la ville. En fait, Qt améliore de nombreux problèmes de gestion de la mémoire si vous configurez les choses pour quelles tombent hors de portée. En outre, Qt lui-même fait un bon travail en isolant lutilisateur de nombreux problèmes liés au C ++. Chaque langage et chaque cadre a ses avantages et ses inconvénients. Cest un problème très, très compliqué qui peut généralement être résumé par laddition souvent observée chez les convives: vitesse, qualité et prix (mais vous ne pouvez en choisir que deux).
Bien que les règles disent que je devrais garder axé sur la réponse à la question, je souhaite réfuter certains des problèmes soulevés par Billy ONeal, qui, à mon avis, fait du bon travail en résumant les raisons fréquemment citées de ne pas utiliser Qt:
-
Qt est en effet une bibliothèque / framework / fichiers den-tête C ++. Il est augmenté par un macro processeur (moc) qui active les signaux et les slots, entre autres. Il transforme des commandes de macro supplémentaires (telles que Q_OBJECT) afin que les classes aient une introspection et toutes sortes dautres goodies que vous pourriez considérer comme lajout de fonctionnalités Objective-C à C ++. Si vous en savez assez sur C ++ pour être offensé par ce manque de pureté, cest-à-direvous êtes un pro, alors 1) nutilisez pas Q_OBJECT et ses semblables ou 2) soyez reconnaissant quil fasse cela, et programmez dans les cas très limités où cela pose un problème. Pour les gens qui disent « Utilisez Boost pour les signaux et slots! « alors je rétorquerais que vous échangez un » problème « pour un autre. Boost est énorme, et il a ses propres problèmes fréquemment cités tels que la documentation médiocre, une API horrible et des horreurs multiplateformes (pensez aux anciens compilateurs comme gcc 3.3 et gros compilateurs de fer comme AIX).
-
Pour le support de léditeur, cela découle également de 1, je suis un peu daccord. En fait, Qt Creator est à mon humble avis le meilleur éditeur graphique C ++, point final , même si vous n « utilisez pas les trucs Qt. De nombreux programmeurs professionnels utilisent emacs et vim. De plus, je pense quEclipse gère la syntaxe supplémentaire. Ainsi, aucun problème avec les macros Qt (Q_OBJECT) ou les ajouts de signaux / slots. Vous ne trouverez probablement pas ces macros dans Visual Studio, car (je concède) ce sont des ajouts à C ++. Mais dans lensemble, les utilisateurs de C # / .NET nutiliseront pas de toute façon Qt, car ils disposent de nombreuses fonctionnalités couvertes par leurs propres techniques propriétaires.
-
Quant à la taille de la source Qt, tant quelle se compile du jour au lendemain, quimporte? Jai compilé Qt 4 sur mon Macbook dual core en « moins dune nuit ». Jespère certainement que ce nest pas ce qui motive votre décision utiliser ou non une technologie particulière. Sil sagit vraiment dun problème, vous pouvez télécharger les SDK précompilés pour Mac, Linux et Windows à partir du site Web de Qt.
-
La licence est disponible en trois choix: 1) Licence propriétaire au cas où vous souhaiteriez modifier Qt ITSELF et ne pas partager, ou masquer le fait que lon utilise Qt et ne veut pas donner dattribution (peut être très important pour la marque et image!) 2) GPL et 3) LGPL. Oui, il y a des problèmes de liaison statique (rouler tout Qt dans le binaire) – mais je pense que cest plus parce quon ne peut pas jeter un coup dœil à lintérieur et remarquer que vous êtes u chanter Qt (attribution!). Jai essayé dacheter une licence propriétaire à Digia, et ils mont dit « pour ce que vous faites, vous nen avez vraiment pas besoin ». Wow. Dune entreprise qui vend des licences.
-
La taille du binaire / bundle est due au fait que vous devez distribuer le contenu de Qt à des gens qui ne l’ont pas: Windows l’a déjà? les trucs de Visual Studio ou vous devez installer le run-time. Mac est déjà livré avec lénorme Cocoa et peut être lié dynamiquement. Bien que je ne fasse pas beaucoup de distribution, je nai jamais trouvé beaucoup de problème avec la distribution du fichier statique denviron 50 mégaoctets (que je peux encore réduire avec certains des utilitaires de décapage / compression binaires comme UPX). faites assez attention pour le faire, mais si la bande passante posait un problème, jajouterais une étape UPX à mon script de construction.
-
Quest-ce qui définit «Native Look and Feel? Je pense que « la plupart » conviendraient que Mac se rapproche le plus de laspect et de la convivialité unifiés. Mais ici, je suis assis, regardant Safari, iTunes, Aperture, Final Cut Pro, Pages, etc. et ils ne se ressemblent en rien malgré le fait quils sont fabriqués par le fournisseur du système dexploitation. Je pense que laspect « sensation » est plus pertinent: style des widgets, réactivité, etc. Si vous vous souciez de la réactivité, alors voici une bonne raison dutiliser C ++ plutôt que Java, ou un autre langage très dynamique. (LObjectif C est également génial, mais jessaye de dissiper les mythes sur Qt)
En résumé, cest un problème compliqué. Mais je tiens à souligner que je pense quil y a moins de raisons de « ne pas utiliser Qt » comme on pourrait le penser en se basant sur des mythes et des informations périmées depuis une décennie.
Commentaires
- Ce que je ne ' obtenir, cest pourquoi ces bibliothèques multiplateformes ne sont ' que des fonctions dencapsulation , ou même mieux; if tourne autour des fonctions Cocoa, Win32, KDE / Gnome, assurant la meilleure interface utilisateur, avec toutes les fonctionnalités de '.
- @MarcusJ Ecrire un wrapper autour une boîte à outils est clairement non triviale, sans parler de 4 ou plus – mais si vous pensez que ' est aussi simple que cela, ' êtes le bienvenu essayer. Quant à lidée que cela pourrait être réalisé en utilisant uniquement un prétraitement conditionnel … vous devez plaisanter, non?
- @MarcusJ libui est exactement cela (mais sans le support de KDE).
- Je veux ajouter que vous pouvez maintenant utiliser Qt / QML avec .NET. Vous navez ' pas besoin de toucher C ++. github.com/qmlnet/qmlnet PS: Je ' suis lauteur.
Réponse
Il sagit en partie de licences. Voir https://en.wikipedia.org/wiki/Qt_(software) #Licensing pour une partie de lhistorique des licences. Jusquen 2000, les gens qui se souciaient fortement de lopen source nutilisaient pas Qt. Point final. (Cétait, en fait, la motivation initiale pour le développement de Gnome.) Jusquen 2005, les gens qui voulaient pouvoir publier des logiciels libres pour Windows nutilisaient pas Qt.Même après cette date, les gens qui voulaient des logiciels libres sous autre chose que la GPL navaient tout simplement pas la possibilité dutiliser Qt. Ainsi, tout projet de logiciel libre plus ancien que ces dates, ne pouvait pas utiliser Qt. Et, bien sûr, les gens qui écrivaient du code propriétaire devaient payer pour le privilège.
De plus, ce nest pas comme sil y avait un manque dautres options. Par exemple WxWidgets , GTK + et Tk sont tous des boîtes à outils open source et multiplateformes.
De plus, pendant longtemps, Windows était si dominant sur le bureau que de nombreux logiciels se contentaient de fonctionner sur Windows. Si vous installez la chaîne d’outils Microsoft, il est plus facile d’utiliser les éléments propriétaires de Microsoft que de se soucier de quoi que ce soit d’autre, et de nombreux programmeurs l’ont fait.
Commentaires
- @btilly: GTK + est multiplateforme. Par exemple, le client Pidgin IM est écrit sur GTK +.
- Ok, cependant, il est possible ' en quelque sorte ' pour fonctionner sous Windows 🙂
- Installez simplement GIMP sur Windows et jetez un œil.
- Oui, et GIMP fonctionne bien sous Windows, mais il ne le fait certainement pas ' ne correspond pas à laspect de linterface utilisateur de Windows 7 & feel.
- Pidgin est probablement un meilleur exemple de GTK sous Windows. Il ne fait ' rien dextraordinaire, mais il sintègre et le fait depuis peut-être 10 ans ou plus?
Réponse
Je suis daccord avec presque toutes les raisons évoquées ci-dessus, mais beaucoup de gens ici ont dit quils nutiliseraient pas Qt en raison des frais généraux supplémentaires que cela entraîne. Je ne suis pas daccord avec cela parce que tous les langages les plus courants aujourdhui (Java, C # et Python) entraînent eux-mêmes un peu de surcharge.
Deuxièmement, Qt rend la programmation avec C ++ si simple et directe quelle compense le des ressources supplémentaires quil utilise. Jai rencontré pas mal dapplications console écrites en Qt plutôt quen C ++ standard en raison de la facilité avec laquelle elles peuvent être écrites.
Je dirais que la productivité de Qt est supérieure à celle du C / C ++ mais inférieure à celle des langages comme Python.
Commentaires
- Je suppose que ' est tout relatif à lexpérience de lindividu ', car je peux coder OK en C ++ 14, mais chaque fois que je regarde un code Qt, je dois plisser les yeux pour le reconnaître comme étant le même langage … donc je ne pense certainement pas ' ' est le booster de productivité unanime que vous ' impliquez ici.
- @underscore_d évidemment si vous connaissez très bien C ++ et que vous ne ' t Qt, vous ne serez pas plus productif avec ce dernier. Mais lorsque vous apprenez à connaître à la fois C ++ et Qt, le framework rend vraiment beaucoup de choses plus faciles et plus rapides à implémenter (C ++ 11, 14, etc. comblent le vide, mais pas encore complètement).
Réponse
Ce nest vraiment pas une tentative de déclencher une guerre des flammes, je voulais juste aborder certains des points.
La vraie raison pour laquelle Qt nest pas plus largement utilisé est que cest du C ++ et que moins de gens utilisent le C ++ pour les applications de bureau.
Qt nest pas une bibliothèque C ++. Il nécessite une étape de compilation séparée, ce qui rend le processus de construction beaucoup plus compliqué par rapport à la plupart des autres bibliothèques.
Le vs-addin pour visual studio le fait automatiquement, tout comme le processus de création de ligne de commande de Qt. Le compilateur de ressources utilisé pour créer les boîtes de dialogue pour MFC est également une étape distincte, mais cest toujours du c ++.
Qt est une grande quantité de source, qui doit être présent et préinstallé sur nimporte quelle machine que vous utilisez avant la compilation. Cela peut rendre la configuration dun environnement de compilation beaucoup plus fastidieuse.
Il existe un téléchargement binaire pour chaque version de visual studio et la construction à partir des sources sont une commande unique. Je ne vois pas que la taille de la source du SDK est tellement une affaire de nos jours. Visual studio installe désormais toutes les bibliothèques C ++ plutôt que de vous laisser choisir, par conséquent la taille dinstallation du compilateur est> 1 Go.
It » s disponible uniquement sous LGPL, ce qui rend difficile lutilisation dun déploiement binaire unique lorsque lon doit publier sous une licence plus restrictive ou moins restrictive.
La LGPL sapplique uniquement à la bibliothèque, elle naffecte pas votre code. Oui, cela signifie que vous devez expédier des DLL plutôt quun seul binaire (sauf si vous payez), mais dans un monde où vous devez télécharger un runtime Java ou une mise à jour .Net pour un petit utilitaire, ce nest pas si grave. « est également moins problématique sur les plates-formes avec une seule ABI afin que dautres applications Qt puissent partager les bibliothèques.
Dans certains cas, cela ne fonctionne tout simplement pas » t ressemblent à des programmes natifs.Concevoir une interface utilisateur unique pour toutes les plates-formes ne va pas par nature sembler correct lorsque vous passez dune machine à lautre, pour diverses raisons de style visuel.
Cest supposé pour utiliser des widgets et des thèmes natifs. Je dois admettre que je fais principalement des applications techniques donc mes utilisateurs ne sont pas trop préoccupés par le style. Sur Windows en particulier, la nouvelle mode pour que tout se présente comme un widget pour smartphone signifie quil y a de moins en moins de norme de toute façon.
Commentaires
- Un grand nombre de grandes éditeurs de logiciels créent des applications commerciales en C ++, mais je ' ne connais pas beaucoup d’utilisateurs de QT. Donc, même si je comprends que les développeurs non-C ++ peuvent éviter QT, il y a dautres raisons déviter QT même lorsque vous écrivez une application C ++, il semblerait. En fait, il ny a vraiment ' aucun langage multiplateforme et boîte à outils dinterface graphique que je ne peux ' trouver à redire. Il semble que le développement multiplateforme soit JUST PLAIN HARD, et que le faire correctement n’est jamais facile ni gratuit, et que la promesse faite par QT (écrivez votre GUI une fois et réutilisez cette GUI partout) n’est pas ' t assez.
- La plupart des logiciels de bureau C ++ sont soit dans MFC car ils ont démarré il y a 20 ans, soit utilisent une boîte à outils interne lancée il y a 20 ans pour éviter MFC (par exemple MS-Office ou Autocad). Je doute que beaucoup soit écrit en C ++ / CLR avec WPF. Mais même sans considérations multiplateformes, je trouve que Qt est le meilleur (ou le moins pire!) De la boîte à outils de bureau. Comme la plupart des gens, nous nous dirigeons vers un front-end webby (éventuellement dans QtQuick / QML) et un serveur backend C ++ – qui utilisera probablement des signaux / slots Qt mais pas dinterface graphique
- Je suis daccord. Le moins pire. Et même sur les applications Windows uniquement, je préfère ' déboguer les problèmes QT que les problèmes MFC.
- @WarrenP – oui je ne ' t manquez la recherche de codeproject pour tout ce qui manque à MFC. Mais avec le nouvel amour de MSFT ' pour le code natif – ils nont ' pas fait grand-chose pour faciliter lécriture dune interface graphique.
Réponse
La raison est simple: il na pas de bonnes liaisons avec toutes les langues traditionnelles, et ce nest pas par magie toujours approprié pour le travail à accomplir.
Utilisez le bon outil pour le travail. Si jécris une simple application de ligne de commande, pourquoi est-ce que je gonflerais cela avec Qt juste pour le plaisir?
Comme réponse plus générale (que je peux donner parce que je suis pertinent ici ), certains programmeurs ne lauront tout simplement jamais essayé et décidé de lutiliser. Dans certains cas, il ny a aucune raison particulière autre que le programmeur nen a jamais trouvé le besoin et ne la jamais examiné.
Commentaires
- Mais Qt fournit possibilité décrire uniquement une application console. Nest-ce pas '?
- @Dehumanizer: Je nen ai aucune idée. Mais pourquoi devrais-je lutiliser pour un petit outil utilitaire? Quel avantage cela mapporterait-il lorsque je peux facilement écrire lapplication en C ++ standard? Il semble que vous ' êtes à la recherche d’une raison d’utiliser une bibliothèque , qui est une façon de programmer à rebours.
- @Dehumanizer: As Jai dit que ' est une approche à rebours. Lorsque vous aurez besoin dune bibliothèque, vous ' le saurez, puis vous pourrez en essayer quelques-unes et voir ce qui correspond le mieux à vos besoins. Essayer de recueillir une opinion sur une bibliothèque lorsque vous navez ' pas de cas dutilisation est un imbécile ' s course.
- " Si ' jécris une simple application de ligne de commande, pourquoi est-ce que je gonflerais ça avec Qt juste pour le plaisir " il y a au moins un outil non-gui très célèbre écrit en Qt – Doxygen 🙂
- @Dehumanizer par exemple lorsque vous devez traiter des fichiers, xml, unicode, json, regexp, concurence, bases de données, etc, etc, très vite et ne ' pas envie de télécharger, adopter, maintenir une douzaine de 3e bibliothèques de groupe.
Réponse
Les cadres comme Qt sont appropriés lorsque vous « êtes plus préoccupé par la recherche de votre produit le même sur toutes les plates-formes que si votre produit a lair correct sur toutes les plates-formes. De plus en plus de nos jours, ces types dapplications passent aux technologies Web.
Réponse
à mon avis, apprendre la programmation C ++ est plus simple que de tomber dans dautres langages qui cachent leur complexité, et le programmeur ne sait pas quoi se passe vraiment en arrière-plan. Qt, dautre part, ajoute quelques avantages par rapport au C ++, pour le rendre plus haut que le C ++ natif. Ainsi Qt C ++ est un excellent framework pour qui veut développer des tâches de bas niveau, ou de haut niveau, de la même manière. C ++ est (par certaines pratiques) un langage complexe et simple. Complexe pour qui ne veut pas contester avec, simple pour celui qui laime.Ne laissez pas cela pour sa complexité!
Réponse
Je conviens que Qt est un cadre agréable avec lequel travailler. Pourtant, il y a un certain nombre de problèmes que jai avec lui:
- Il est écrit en C ++, qui est un langage de très bas niveau. Le seul fait quil sagisse de C ++ rendra chaque programmeur Qt nettement moins productif par rapport aux Frameworks écrits dans dautres langages. Mon principal avantage avec C ++ en tant que langage de développement dinterface graphique est quil na pratiquement aucune notion de gestion automatique de la mémoire, ce qui rend le processus de développement beaucoup plus sujet aux erreurs. Ce nest pas introspectif, ce qui rend le débogage beaucoup plus difficile. La plupart des autres grandes boîtes à outils dinterface graphique ont une certaine notion de gestion automatique de la mémoire et dintrospection.
- Chaque boîte à outils multiplateforme souffre du problème quelle ne peut implémenter que le plus petit dénominateur commun de toutes les plates-formes prises en charge. Cela, et différentes directives dinterface utilisateur sur différentes plates-formes, remettent en question lopportunité des interfaces graphiques multiplateformes dans leur ensemble.
- Qt est très centré sur le codage de toute votre interface utilisateur. Même si vous pouvez utiliser QtDesigner pour créer certaines parties de votre interface utilisateur, il manque gravement par rapport à, disons, (Cocoa / Obj-C) Interface Builder ou les outils .Net.
- Même si Qt inclut de nombreuses fonctionnalités dapplication de bas niveau, il ne peut pas se comparer à un framework conçu à la main pour une certaine plate-forme. Les bibliothèques de système dexploitation natives pour Windows et OSX sont nettement plus puissantes que les implémentations de Qt. (Pensez aux frameworks audio, à laccès au système de fichiers de bas niveau, etc.)
Cela dit, jadore utiliser PyQt pour le prototypage rapide dapplications ou les applications internes. Utiliser Python pour faire tout le codage atténue les problèmes de C ++ et fait de Qt un endroit très agréable.
Edit, en réponse à quelques commentaires:
Quand jai écrit sur Qt étant écrit en C ++, je ne me plaignais pas tellement de Qt lui-même , mais plus sur lenvironnement dans lequel il vit. Il est vrai que Qt gère très bien ses propres ressources, mais tout votre code lié à linterface graphique mais pas à Qt doit également être écrit en C ++. Même là, Qt fournit de nombreux de bons outils, mais finalement, vous devez gérer le C ++ à ce niveau. Qt rend le C ++ supportable, mais cest toujours du C ++.
En ce qui concerne lintrospection, ce que je veux dire est ceci: Les cas les plus difficiles à déboguer sont lorsque vous avoir un pointeur vers un objet qui ne se comporte pas comme vous le pensez. Avec C ++, votre débogueur peut être capable de regarder un peu à lintérieur de cet objet (sil se trouve quil a des informations de type au point thwt), mais même cela ne fonctionne pas toujours. Prenez, dautre part, Cocoa dans la même situation. Dans Cocoa / Obj-C, vous seriez capable denvoyer des messages (« fonctions dappel ») à un objet directement dans le débogueur. Vous pouvez changer létat des objets, vous pouvez linterroger pour ses attributs, vous pouvez lui demander son type et ses noms de fonction … Cela peut rendre le débogage beaucoup plus pratique. Qt / C ++ na même rien de comparable.
Commentaires
- 1. Qt se soucie seul de la gestion de la mémoire, vous ne devez pas appeler ' delete ' après chaque ' nouveau '. 1a. Le C ++ nest PAS un langage de bas niveau, cest un langage de haut niveau avec des capacités ' ' de bas niveau. 3. Je suis daccord, mais Qt prévoit de créer une interface utilisateur avec QtDesigner et avec ' plain code ' en même temps. 4. Daccord à nouveau, mais Qt prévoit également dutiliser des API natives.
- à votre point n ° 1. Je pense que c ++ a une sorte de gestion de mémoire semi-automatique: si vous utilisez des pointeurs intelligents comme std :: auto_ptr ou boost :: shared_ptr etc. vous navez généralement pas à vous soucier de libérer de la mémoire. Ces types de conteneurs peuvent également être créés pour dautres ressources (fichiers, ressources système à libérer). Lutilisation de RAII-pattern aide beaucoup à la gestion de la mémoire et à mesure quil grandit en vous, vous navez pas vraiment à vous soucier de la mémoire.
- " Le seul fait que cest C ++ qui rendra chaque programmeur Qt nettement moins productif par rapport aux Frameworks écrits dans dautres langages. " [citation nécessaire]
- @ SK-logic: Bien que je pense Je comprends tous les mots de votre troisième phrase, je nai aucune idée de ce que vous dites. Quest-ce quun " niveau de limite dabstraction "? Dailleurs, votre première phrase est fausse, étant donné la définition Wikipedia de " langage de bas niveau ".
- @ SK-logic: La métaprogrammation des modèles est Turing-complete, et il y a des gens assez intelligents et bien informés pour en profiter. RAII nest pas ' t un excellent garbage collection, mais le fait quil fonctionne pour toutes sortes de ressources compense plus ou moins cela.Maintenant, spécifiquement, quelle sorte dabstraction fonctionne en Java mais pas en C ++?
Answer
Le plus important mais chose non mentionnée. Dans un grand projet, une chose cause tellement de problèmes et de code non nécessaire. Les mécanismes de créneau de signal de Qt sont inefficaces. Les widgets Qt ne fournissent pas les signaux nécessaires pour les widgets dévénements simples. Par exemple, vous ne pouvez pas définir de signaux pour onHover, onMouseEnter, onMouseLeave, onKeyReleased, onLostFocus, onGainFocus et etc. Même les widgets les plus complexes tels que QTreeWidget fournit un ou deux signaux inutiles ultra simples.
Oui, vous pouvez utiliser des événements MAIS !!! vous devez créer une nouvelle classe pour chaque widget avec un événement personnalisé. Cest une énorme perte defficacité;
- Vous avez réécrit chaque événement dobjet de widget personnalisé, il y a de petits changements.
- Vous perdez tous les éléments de Qt Designer. Vous devez promouvoir chaque widget avec des événements personnalisés.
- Le projet est devenu plus grand et difficile à maintenir.
- Vous avez commencé à ne pas aimer qt à cause de cela. Et vous avez commencé à parler de la façon dont .net fournit des délégués, en quoi il est bien meilleur que le slot de signal, comment .net composants (widgets) fournissent généralement tous les événements que vous pouvez imaginer. Et etc.
Un de mes collèges a écrit une nouvelle classe de zone de liste déroulante pour chaque widget de zone de liste déroulante parce quil devait utiliser un événement non signal. Histoire vraie …
Cependant, Qt est le meilleur framework dinterface utilisateur C ++ à ce jour avec des baisses et des hausses.
Commentaires
- Concernant les événements et la création de nouvelles classes: vous pouvez utiliser des filtres dévénements dans les classes qui doivent y réagir.
- " Oui, vous pouvez utiliser des événements MAIS !! ! vous devez créer une nouvelle classe pour chaque widget avec un événement personnalisé. Cest une énorme perte defficacité; " – PAS EXACTEMENT. Je me retrouve juste avec bool eventFilter qui gère plusieurs widgets, puis installEventFilter (this) sur tous les widgets enfants. Et ce nest pas ' t perdre en efficacité et en performances de programmation! En fait, je nutilise jamais " Widgets promus " … Je laisse tomber juste un widget vide, installe-le comme eventFilter dessus et réimplémente la plupart des mes événements dans ma classe principale cpp. Essayez-le, didn ' t pain 🙂 Vous pouvez personnaliser presque TOUT dans Qt sans créer de nouvelles classes à chaque fois
Réponse
Jaime beaucoup Qt, mais cest un peu lourd pour beaucoup dapplications. Parfois, vous navez pas besoin de ce niveau de complexité. Parfois, vous avez juste besoin de quelque chose de simple sans tous les frais généraux de Qt. Toutes les applications nont pas besoin dêtre pilotées par les événements et C ++ fournit un ensemble raisonnable de modèles. Boost fournit un autre très bon ensemble et inclut beaucoup de fonctionnalités de bas niveau (fichier, socket, pointeurs gérés, etc.) que QT fait.
Dautres applications ont des exigences de licence qui ne fonctionnent pas bien avec la GPL , LGPL ou licence commerciale de Qt. La GPL ne convient pas aux logiciels commerciaux. La LGPL est inappropriée pour les logiciels liés statiquement et la licence commerciale coûte de largent – quelque chose que beaucoup ne sont pas disposés à payer.
Certains ont des considérations de sécurité ou de stabilité qui nautorisent pas les bibliothèques complexes comme Qt.
Vous devez exécuter moc pour prétraiter vos sources. Ce nest pas un gros problème, mais cela peut être intimidant pour le nouvel utilisateur. Beaucoup de programmeurs pensent que vous devez utiliser qmake avec Qt, mais cest « un abus de langage. Il est possible de brancher Qt dans dautres systèmes de construction assez facilement.
Certaines cibles sont très mémoire ou CPU limités.
Il contient des pièges spécifiques à la plate-forme. La plupart de ces pièges ne sont pas documentés. Créez une application suffisamment volumineuse et vous les rencontrerez et vous vous demanderez ce qui se passe (avertissement, le la dernière fois que jai utilisé Qt dans la colère, cétait il y a plus de 18 mois, donc il sest peut-être amélioré).
Cest uniquement du C ++. Dautres liens de langage existent, mais ils ont tendance à cacher ou à exposer mal une grande partie des fonctionnalité pour laquelle vous « voudriez Qt.
Il ya beaucoup de raisons de ne pas utiliser Qt, cest pourquoi il existe des alternatives. Si tout ce que vous avez est un marteau, chaque problème ressemblera à un clou.
Commentaires
- " La LGPL nest pas appropriée pour les logiciels [source fermée] liés statiquement " – cela semble inexact, car en fait, la LGPL et les liens statiques sont légalement possibles ( voir ).
- Votre position semble correcte. Voir gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynamic Mais cest du travail supplémentaire et des choses supplémentaires ' envoyer. Pouvez-vous vous en tirer? Oui. Voulez-vous dépenser leffort? Peut-être pas.
Réponse
La vraie raison nest pas technique.
Les gens arrivent être différent. Leurs choix aussi. Luniformité nest pas une caractéristique humaine.
Commentaires
- Est-ce pour cela que tous les gens marchent sur leurs jambes? Eh bien, ceux qui ont au moins des jambes …
delete
". Le fait que les pointeurs intelligents rendent cela explicite nest pas ' un langage défaillant; et si vous ' ne pensez pas à de telles choses, vous allez générer des déchets dans nimporte quel langage de haut niveau que jai ' vu aussi.