web-dev-qa-db-fra.com

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

Le problème que j'ai, c'est que la plupart des livres C++ que je lis passent presque toujours pour la syntaxe et les bases du langage, par exemple for et boucles while, tableaux, listes, 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 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?

33
user866190

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.

11
Ryathal

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 faire face à cette trivialité au préalable.

18
otto

Étant donné que Qt possède son propre méta-compilateur avec lequel vous devez traiter vos fichiers source, il est difficile de considérer le code Qt comme "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 manque 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++, alors 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++, il indique 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 les bibliothèques comme 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 capable 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.

12
jalf

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++.

9
brian

Ne vous inquiétez pas; au début, la plupart de votre code ne fera que tiliser le framework, mais après un certain temps, vous devrez étendre, même si c'est juste un peu. Ensuite, vous devrez utiliser de plus en plus de C++.

Rappelez-vous également que vous avez toute la source de Qt disponible, le IDE vous amènera avec plaisir à la définition de la fonction/méthode/classe que vous voulez. Plus vous approfondissez, plus vous C++ vous ' je verrai.

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'intègrent 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 à STD pour les projets non-Qt n'est pas si difficile.

  • moc ajouts 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 avantage énorme d'un bon framework, 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 a obtenu pour la première fois 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.

5
Javier

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, notamment 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.

4
Jim In Texas

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 tout développeur Java ou .Net. Vous pourrez bientôt développer ios et Android applications utilisant Qt.

3
Jaak

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.

2
CVist