Apprendre le C ++ via le framework Qt apprend-il vraiment le C ++ [fermé]

32

Le problème que j'ai, c'est que la plupart des livres C ++ que je lis passent presque toujours sur la syntaxe et les bases du langage, par exemple les forboucles while, les tableaux, les listes, les pointeurs, etc.

Mais ils ne semblent jamais construire quelque chose d'assez simple à utiliser pour l'apprentissage, mais suffisamment pratique pour vous faire comprendre la philosophie et le pouvoir de la langue.

Puis je suis tombé sur QT qui est une bibliothèque incroyable!

Mais en travaillant sur les démos qu'ils ont, il me semble que je suis maintenant dans le dilemme inverse. Je me sens comme le fils du riche qui roule dans une voiture de sport subventionnée par le père. Comme si je pouvais créer un logiciel fantastique, mais je n'ai aucune idée de ce qui se passe sous le capot.

Comme exemple de mon dilemme, prenez la tâche de construire un simple navigateur Web. En C ++ pur, je ne saurais même pas par où commencer, mais avec la bibliothèque Qt, cela peut être fait en quelques lignes sur le code.

Je ne m'en plains pas. Je me demande juste comment combler le vide de connaissances entre la structure de base du langage et l'interface de haut niveau que fournit le framework Qt?

user866190
la source
Je ne connais pas la programmation dans Qt. Introduit-il réellement une nouvelle syntaxe ou change-t-il la langue, ou s'agit-il simplement de bibliothèques très sophistiquées?
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Ce n'est pas QT est le framework GUI qt.nokia.com si vous êtes intéressé
Karlson
Qt offre également une alternative aux classes et conteneurs standard (par exemple QString, QList, etc.) et de nombreuses autres fonctionnalités. Je trouve certains d'entre eux encore plus intuitifs que les standards. Je pense que c'est un bel environnement de programmation, mais je conseillerais d'apprendre séparément le langage C ++ de base.
Giorgio
3
Si vous voulez savoir comment Qt est implémenté, téléchargez et regardez son code source.
user16764
1
@Karlson Qt ajoute certaines choses au langage, d'où la nécessité du compilateur de métaobjets moc aka. Cela ajoute de la réflexion et constitue la base du système de signaux / slots de Qt.
Tamás Szelei

Réponses:

11

Voulez-vous savoir comment marcher sur l'accélérateur accélère la voiture, ou vous souciez-vous seulement que marcher sur l'accélérateur accélère la voiture?

Vous voyez l'avantage de la programmation de la boîte noire, qui est un excellent moyen de concevoir un système lorsque toutes les boîtes fonctionnent. Quelqu'un doit faire les boîtes noires et si vous voulez être ce gars / fille, vous devez en savoir plus sur la langue que le gars qui utilise la boîte.

Il y a des emplois qui sont de bons emplois dans chaque style, donc c'est à vous de décider ce que vous voulez programmer. OMI, vous ne vous rendriez pas service si vous ne déployiez pas l'effort de retirer une partie de l'abstraction que QT vous donne finalement.

Ryathal
la source
2
"OMI, vous ne vous rendriez pas service si vous ne déployiez pas l'effort de retirer une partie de l'abstraction que QT vous donne finalement." Votre droit et c'est le sentiment de l'intestin que j'ai
user866190
18

Le plus de dégâts que vous vous ferez, si vous voulez le dire ainsi, est que vous n'apprendrez pas du tout à utiliser les structures de données, les itérateurs, les algorithmes et les chaînes C ++ standard. Qt possède ses propres bibliothèques à toutes ces fins, et vous êtes presque obligé de les utiliser à la place des entités C ++ standard car les API Qt n'acceptent que les structures de données qui leur sont propres.

On pourrait affirmer qu'apprendre à utiliser une bibliothèque d'algorithmes après avoir maîtrisé l'autre est une tâche triviale. Avant de passer à un entretien où les enquêteurs s'attendent à ce que vous maîtrisiez le C ++, assurez-vous de gérer cette trivialité au préalable.

otto
la source
3
D'accord - Qt utilise un ensemble d'outils entièrement différent du standard C ++.
DeadMG
Dans notre entreprise, il y a eu un long débat sur l'opportunité d'utiliser les conteneurs et itérateurs standard ou ceux Qt et nous n'avons pas encore trouvé de solution: nous avons fini par utiliser les deux, même si nous ne mélangeons pas les deux styles dans un module donné. J'ai le sentiment que passer du Qt au standard est conceptuellement très facile, même si cela prendra un certain temps.
Giorgio
9
J'utilise les conteneurs et les algorithmes standard dans mes modèles d'ingénierie, c'est-à-dire ma logique métier. J'utilise des conteneurs Qt dans mon code GUI. De cette façon, mes modèles d'ingénierie sont protégés contre les modifications de Qt et vice versa. Qt a des moyens de connecter des conteneurs standard et leurs conteneurs.
emsr
2
Je ne me soucie pas tellement des conteneurs de toute façon. Ils ne sont pas la partie la plus utile de la STL; les algorithmes sont beaucoup plus importants. En raison de la conception de la STL, ses algorithmes peuvent facilement fonctionner avec d'autres conteneurs, et les conteneurs Qt sont conçus pour fonctionner avec les algorithmes STL. Gagnant-gagnant, vraiment.
MSalters
12

Étant donné que Qt a son propre méta-compilateur avec lequel vous devez traiter vos fichiers source, il est difficile de considérer le code Qt comme étant "juste C ++".

Mais plus important encore, le style de C ++ que Qt utilise et encourage est quelque chose qui, pour le reste d'entre nous, a été vu pour la dernière fois vers 1995.

Vraiment, c'est une tentative de rendre C ++ aussi semblable à Java que possible. Il passe à côté ou décourage toutes les choses incroyables qui valent vraiment la peine d'utiliser le C ++ aujourd'hui . Au lieu de cela, vous êtes enfermé dans un sous-ensemble qui ressemble le plus souvent à un Java inférieur.

Donc, si l'objectif est d'apprendre le C ++, je dirais non, restez à l'écart de Qt. Jetez peut-être un œil à Boost à la place, si vous souhaitez utiliser une bibliothèque établie comme point de départ. Boost incarne les pratiques considérées comme bonnes aujourd'hui .

Mais honnêtement, si vous voulez apprendre le langage C ++ , choisissez un bon manuel et concentrez-vous sur le langage .

Écrire un navigateur Web, peu importe comment vous le faites, vous apprendra au mieux sur les navigateurs Web. Cela ne vous apprendra pas grand-chose sur la langue que vous utilisez.

C ++ en tant que langage n'a pas de classe WebBrowser intégrée. Si vous lisez la norme C ++, elle ne dit rien sur les navigateurs. Il ne mentionne même pas les applications GUI.

C'est parce que ces choses sont construites sur le dessus, fournies par des bibliothèques telles que Qt. Le C ++, comme tout langage de programmation, concerne la logique, la façon d'exprimer cette logique. Et oui, cela signifie travailler avec des tableaux et des pointeurs et des boucles et toutes ces choses.

Seriez-vous en mesure d'écrire un navigateur Web en utilisant uniquement ces outils intégrés, avec suffisamment de temps ? Savez-vous comment exprimer la logique du programme impliqué? Sinon, vous devez passer plus de temps sur les boucles et les pointeurs, et moins appeler new QWebKit()et simplement superposer des bibliothèques prêtes à l'emploi.

La «philosophie et la puissance du langage» se trouvent dans les tableaux et les listes et boucles, pas dans les navigateurs Web.

jalf
la source
4
Je n'ai jamais dit qu'ils étaient meilleurs parce qu'ils sont nouveaux . Ils sont nouveaux et ils sont meilleurs. Le fait est que le C ++ en tant que langage n'est tout simplement pas très bien adapté à cette approche de type Java. En C ++, l'héritage et le polymorphisme d'exécution sont pénibles, car ils vous obligent pratiquement à allouer des tas partout, ce qui a donné au langage sa réputation de fuites de mémoire en premier lieu, car il est sujet aux erreurs de découpage, car cela rend la copie d'objets plus difficile. Il est également inefficace, moins extensible et nécessite un code passe-partout plus fastidieux.
2012
2
Heck, Qt a besoin de son propre méta-compilateur juste pour rendre son style de programmation supportable . Cela ne vous dit-il pas quelque chose?
2012
4
Je ne défendais pas Qt en soi (j'y vois moi-même beaucoup de limites). Votre déclaration "le style de C ++ que Qt utilise et encourage est quelque chose qui, pour le reste d'entre nous, a été vu pour la dernière fois vers 1995." Avec cette formulation, il n'est pas clair ce qui est mauvais avec ce style (à part qu'il a 15 ans) et quelles sont les meilleures alternatives actuelles. Peut-être que si vous êtes plus précis, ce que vous voulez dire deviendra plus clair.
Giorgio
3
@JimInTexas: il est également antérieur à C ++. Votre point? Au début du milieu des années 90, C ++ était une bête très différente. C'était beaucoup plus proche de ce qui est finalement devenu Java qu'aujourd'hui.
jalf
3
@ JimInTexas: Oui, c'est faux, mais il faut aussi espérer que ce que je veux dire soit assez clair. C'est une tentative pour atteindre les objectifs de conception de Java, en C ++. C'est une tentative d'implémentation du même modèle OOP imparfait que Java implémente.
2012
9

L'apprentissage du C ++ via le framework Qt apprend-il vraiment le C ++

Peut être.

Je devrais voir le code que vous mettez dans vos gestionnaires d'événements.

Vraiment cependant, ne soyez pas obsédé par ce que vous "savez". Nous utilisons tous des cadres de fenêtrage et nous apprenons tous toujours. Continuez simplement à coder / lire de nouvelles choses et vous continuerez à apprendre le C ++. L'apprentissage d'un nouveau cadre de fenêtrage est un excellent ajout à vos compétences même si cela ne signifie pas que vous pouvez implémenter un réseau de neurones ou un tri rapide en C ++.

brian
la source
5

Ne t'inquiète pas tout d' abord la plupart de votre code sera tout simplement utiliser le cadre, mais après un certain temps , vous devrez étendre , même si un peu. Ensuite, vous devrez utiliser de plus en plus de C ++.

Rappelez-vous également que vous avez toute la source de Qt disponible, l'IDE vous amènera avec plaisir à la définition de la fonction / méthode / classe que vous souhaitez. Plus vous allez en profondeur, plus vous verrez de C ++.

D'autres ont mentionné la différence entre Qt C ++ et C ++ standard. Ceux-ci se répartissent en deux camps:

  • bibliothèque différente: Qt inclut tous les conteneurs habituels: tableaux, listes, ensembles, hashmaps, etc. Ils s'emboîtent très bien et sont de bonnes implémentations, mais ils ne sont pas de la variété STD. Pourtant, dans les versions récentes (4.1 et ultérieures, je pense), ils ont des API de type STD en plus de l'ancienne variété (et une API de type Java). En fin de compte, les choix de conception (quand utiliser un tableau, quand utiliser une table de hachage) sont les mêmes, donc passer en STD pour les projets non-Qt n'est pas si difficile.

  • mocajouts de syntaxe: principalement pour la gestion du signal, mais aussi quelques constructions de boucles plus agréables. Beaucoup de gens pensent que cet outil signifie qu'il n'est plus en C ++; mais à mon humble avis, ils se sentent comme des macros légèrement plus intelligentes. Une bonne gestion du signal à couplage lâche est un énorme avantage d'un bon cadre, et c'est notoirement difficile à faire sur un langage typé statique. En C ++ moderne, c'est faisable avec une forte dose de modèles; mais c'était loin d'être standard lorsque Qt est arrivé moc. En fin de compte, si vous souhaitez plus tard faire des projets non-Qt, vérifiez d'abord si vous utiliserez un framework et s'il a des signaux. Si oui, alors la plupart de ce que vous avez l'habitude de faire avec Qt s'appliquera, donc pas de «mal» à apprendre Qt en premier.

Javier
la source
Quelles améliorations de boucle sont données par moc?
Basile Starynkevitch
@Basile Starynkevitch: Peut-être qu'il fait référence à la boucle foreach (que j'utilise beaucoup). C'est un ajout de syntaxe mais, ASAIK, cela n'a rien à voir avec moc. Vous avez donc raison de dire que la réponse devrait peut-être être formulée différemment.
Giorgio
foreachest juste une macro .... (en fait un "alias" Q_FOREACHdéfini dans <Qt/qglobal.h>). Je ne pense pas que cela le moctraite. Et C ++ 11 a la for (auto it : container)construction!
Basile Starynkevitch
@Basile Starynkevitch: Probablement Qt aurait besoin d'une profonde réingénierie s'il devait passer à C ++ 11: Qt a été conçu pour C ++ (et a également essayé de surmonter certaines de ses limites), donc certaines de ses solutions ne sont pas nécessaires avec C ++ 11.
Giorgio
1
J'utilise à la fois Qt et Boost. Il y a beaucoup de chevauchement entre les deux bibliothèques, mais Qt est beaucoup plus facile à apprendre.
Jim In Texas
4

Qt est largement utilisé dans le monde commercial car il fournit un ensemble d'outils et un environnement de développement multiplateforme complets, y compris une bonne bibliothèque GUI.

Il prend également pleinement en charge l'internationalisation, y compris l'excellent outil «Linguist».

Si vous prévoyez une carrière universitaire, je ne m'embêterais pas avec Qt. Si, en revanche, vous aimez le C ++ et que vous souhaitez apprendre une compétence commercialisable, Qt vaut la peine d'être appris.

Et oui, Qt est C ++, et vous pouvez mélanger les bibliothèques standard et augmenter le contenu de votre cœur si cela vous fait vous sentir mieux.

Jim au Texas
la source
3

C'est une mauvaise idée d'apprendre le C ++ via Qt. Vous devez d'abord apprendre les concepts du langage indépendamment de tout framework et c'est ce que les livres c ++ vous apprendront et ils ont raison. Fondamentalement, «pour et boucles tandis que, les tableaux, les listes, les pointeurs» sont ce que sont les langages de programmation. Des fonctionnalités supplémentaires sont fournies par les frameworks. Une fois que vous avez appris un langage de programmation, vous pouvez apprendre n'importe quel framework comme Qt ou MFC qui est construit en utilisant le langage, afin que les applications puissent être développées rapidement. En ce qui concerne Qt, une fois que vous apprenez le c ++, c'est un excellent framework qui vous rend aussi productif que n'importe quel développeur Java ou .Net. Vous pourrez bientôt développer des applications iOS et Android à l'aide de Qt.

Jaak
la source
2

Eh bien, je pense que la meilleure façon d'apprendre le C ++ est d'utiliser UNIQUEMENT sa propre syntaxe (Standard C ++), donc vous pourrez utiliser le truc LANGUAGE, et PAS le Qt (ou tout autre framework, bibliothèque ... etc).

Pourquoi? car en tant que débutant, lorsque vous regardez un code C ++ mélangé à un autre code non-C ++ (Qt dans ce cas), vous ne pourrez pas voir ce qui est en C ++ et ce qui ne l'est pas, ce sera plutôt un processus plus complexe.

CVist
la source