Inceput in C++:cum creez grafica?

Sunt clasa a 11-a mate info iar la scoala invat c++ dar merge cam incet(momentan facem doar tablouri dimensionale cu numere si text).Vreau sa avansez si sa invat cum sa creez aplicatii (cu grafica),nu doar chestii in consola.Ce librarii de C++ ar trebui sa invat/ce altceva ar trebui sa invat(OpenGl etc)?Pentru a crea diverse aplicatii(ex:calculatorul de pe windows 7 sau o chestie din asta).De unde sa incep?

Am invatat si am facut niste practica cu javascript respectiv jquery cateva luni dar m-am plictisit(nu prea ma atrage designul,vreau ceva cu mai multa matematica),vreau sa ma orientez pe partea astea de software.Una dintre aplicatiile(daca o pot numi asa) facute cu jquery este asta.Nustiu cat de utila ar putea fi cuiva dar am facuto doar pentru practica.

Din javascript am invatat cum sta treaba cu tipurile de date,array-urile,functiile etc.

Deci de unde incep?ce trebuie sa invat?

1 Like

Prin grafica banuiesc ca intelegi GUI, nu 3D. Îţi sugerez să începi cu QT, este un framework crossplatform (Windows, Linux, MacOSX, alte *nix-uri, chiar si Android) extrem de capabil. Eu in tinereţile mele am realizat cu el QFaxReader (cand fax-ul mai era la moda :slight_smile:).

Majoritatea aplicatiilor C++ folosesc Chromium Embedded Framework sau CEF pentru interfete (chiar si Qt trece usor pe el). Iar pentru jocuri se foloseste in general Unreal Engine 4 sau Cocos2d-x.
Eu personal nu folosesc C++ dar acum lucrez la ceva scris in C++ care integreaza CEF si node.js ca limbaj de scripting,

Ce inveti la scoala e C cu cout si cin. C++ -ul standard de azi e C++ 11 si C++14 (C++17).
De exemplu nu cred ca initializati variabilele cu { } in loc de = ca sa fie respectate tipurile la compilare, nu folositi auto in loc de tipuri ca sa nu aveti probleme cu alocarea memoriei. Sa nu mai zic nimic de int i = (int) x; in loc de int i = static_cast<int>(x);

Deci prima data invata C++, treci peste asta rapid : (daca nu intelegi ceva -> Google)

https://lefticus.gitbooks.io/cpp-best-practices/content/01-Preface.html
(cartea aceasta mi se pare foarte faina, citeste tot incepand cu capitolul style)

sau


Care e ceva mai detaliat.

Gasesti aici orice altceva :

Dupa ce iti va fi util daca vrei sa faci ceva fain :

  1. Implementeaza un server web gen civet
  2. Parsing la TXT, CSV, JSON, YAML si JSON.
  3. Baze de date, in special sqlite si mysql.
  4. Regex
  5. Invata sa folosesti Visual Studio Community.
  6. Invata C#, mult mai multe resurse, pe Windows aplicatiile si interfetele native se fac cel mai usor cu C#.
2 Likes

Eu nu m-as incurca cu C#, in 2017 nu prea iti mai permiti sa fii captiv pe o singura platforma…

Xamarin e imens, .NET Core e din ce in ce mai bun, nu as zice ca esti captiv pe o singura platforma.

Chiar o sa zic ca Microsoft ofera suport pentru linux cu .NET Core cel putin la fel de bun ca Qt. Poti dezvolta pe linux de pe windows. (invers e mai greu)

2 Likes

Pai si ce sa faci cu .NET Core? Asta parca nu are si parte de GUI.

GUI-ul nu mai e nativ in 2017, GUI-ul ti-l faci cu HTML, CSS, JS, JSX sau ceva limbaj bazat pe XML.

Poate sunt eu de modă veche, dar prefer ca aplicatiile mele sa fie lightweight :slight_smile: Cu toate ca masinile actuale au RAM si putere de procesare din belşug, sunt sigur ca utilizatorii prefera aplicatiile foarte sprintene. Mi se pare total exagerat ca o aplicatie sa vina cu zeci sau sute de megabytes de biblioteci…

3 Likes

+1 pentru C++/Qt. E mai mult decat GUI, o sa te ajute enorm sa intelegi si sa aprofundezi mai mult concepte legate de OOP, arhitectura MVC. Tot in liceu am inceput si eu cu el si sansele sunt sa ti se potriveasca ca o manusa.

Daca tot a deviat @isti37 discutia … Intr-adevar C# cu .NET este inca destul de limitat in ceea ce priveste platformele pe care pot rula, asta pentru ca nu a fost gandit de la inceput sa ruleze in mai multe ecosisteme, dar este mai cautat la noi in tara pentru ca e putin mai accesibil deja ai Microsoft peste tot, so why bother? am I right? ).

Totusi, pentru chestiile serioase, o sa se foloseasca C++/Qt in continuare … Automotive, Embedded, IoT. Interfetele in Qt merg bine peste tot, iar sansele sunt ca tu sa ai Qt/Qml in bordul masinii.

QML vs HTML5: http://blog.qt.io/blog/2017/07/28/qml-vs-html5/
QT Embedded: https://www.youtube.com/watch?v=iE8quCit4vM

3 Likes

Multumesc tuturor pt raspunsuri,de asemenea am auzit de SFML.L-ati folosit careva?daca da cum vi se pare?

Pe Windows mai ai si WPF si UWP.

Dar cam tot ce tine de windows desktop development e pe duca. Aplicatii de business s-au mutat toate pe web. Iar multe dintre cele care inca mai sunt native pentru o platforma sau alta sunt construite pe Electron sau pe vre-un framework urias gen Qt. “Aplicatii” in sensul non-web se fac pentru Android si iOS daca chiar ai nevoie de 100%-ul platformei. Iar daca nu, sunt de multe ori aplicatii web impachetate ca o aplicatie normala.

2 Likes

Well, idea ar fi să ai logica separată de interfață.

Logica o poți face în C/C++ și interfața să fie HTML/Javascript.

Știu că a trecut o grămadă de vreme, dar am dat din întâmplare peste thread și aș avea de adăugat (sper că ceva util).

Cred că e bine să te gândești și la ce vrei mai exact. Dacă vrei să dezvolți un GUI atunci da, clar Qt e cea mai bună alegere pentru C++. Dar poate vrei să experimentezi cu concepte de grafică la nivel mai fundamental. Atunci poți, de exemplu, să înveți OpenGL modern: https://learnopengl.com/. Chiar dacă e un API vechi și urât te introduce în conceptele API-urilor moderne.

Dar poate vrei să te duci și mai adânc, poți încerca să scrii un software renderer, să-ți faci tu un fel de OpenGL: GitHub - ssloy/tinyrenderer: A brief computer graphics / rendering course.

Sau poate vrei să faci un ray tracer:

Sau poate îți place image processing:

Sau poate vrei chiar tu să implementezi algoritmi pentru layout (ca să îți faci propriul GUI):

Sau poate vrei să desenezi text (sau, mai general, vector graphics):

Sau poate vrei să dezvolți ceva CAD-like:

L-am folosit, SFML e foarte, foarte bun. E perfect pentru quick prototyping.

Qt cu siguranță nu va „trece” pe CEF, Qt se folosește de CEF pentru QtWebEngine. Dar e doar un feature, implementările pentru QtWidgets și QML nu au treabă cu chromium și nici nu vor avea. De fapt cam asta e special la Qt, are implementare custom și o optimizează pentru ce e nevoie, cam de asta e și posibil să ai Qt pe embedded.

2 Likes