C++ User Interface
C++ User Interface
As vrea sa ma lamuresc cu niste "chiestii" din C++ ca de pe google doar partial am iesit din ceata. As vrea sa trec de la aplicatii consola la aplicatii de tip UI.
Intrebarea mea este cum pot scrie o aplicatie UI in cod C++ pur? Adica am vazut in Codeblock wxWidgets, GTK+, Qt si altele care ma ajuta sa fac chestia asta, dar eu ma gandeam la un cod pur c++ care sa poate fi rulat atat pe Windows cat si pe Linux de exemplu (daca este posibil asa ceva), un cod care sa nu mai depinda de sistemul de operare (gen VC++ - .Net).
PS: Am vazut ca wsWidgets si celelalte au suport si pe alte sisteme de operarea, dar alea sunt c++ pur nativ?
Intrebarea mea este cum pot scrie o aplicatie UI in cod C++ pur? Adica am vazut in Codeblock wxWidgets, GTK+, Qt si altele care ma ajuta sa fac chestia asta, dar eu ma gandeam la un cod pur c++ care sa poate fi rulat atat pe Windows cat si pe Linux de exemplu (daca este posibil asa ceva), un cod care sa nu mai depinda de sistemul de operare (gen VC++ - .Net).
PS: Am vazut ca wsWidgets si celelalte au suport si pe alte sisteme de operarea, dar alea sunt c++ pur nativ?
Cea mai buna batalie este cea castigata fara lupta.
- Marius Bancila
- Fondator
- Posts: 2344
- Joined: 11 Jul 2007, 11:45
- Judet: Timiş
- Location: Timisoara
- Contact:
Re: C++ User Interface
Standardul C++ nu ofera in biblioteoteca STL suport pentru interfete grafice. Pentru asta trebuie sa folosesti frameworkuri ca cele enumerate mai sus. Qt merge pe toate platformele, cred ca ar putea fi o optiune potrivita pentru ce doresti.
- Ovidiu Cucu
- Fondator
- Posts: 3778
- Joined: 11 Jul 2007, 16:10
- Judet: Iaşi
- Location: Iasi
- Contact:
Re: C++ User Interface
Ce inseamna "cod C++ pur"?
Sa inteleg oare ca wxWidgets, GTK+, Qt si altele care ne ajuta sa facem chestii, contin cod C++ impur?
Sa inteleg oare ca wxWidgets, GTK+, Qt si altele care ne ajuta sa facem chestii, contin cod C++ impur?

Ovidiu
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Re: C++ User Interface
Dupa mine Qt e cea mai buna optiune , are o documentatie super buna si este si cross-platform asa cum doresti
- Ovidiu Cucu
- Fondator
- Posts: 3778
- Joined: 11 Jul 2007, 16:10
- Judet: Iaşi
- Location: Iasi
- Contact:
Re: C++ User Interface
Corect, insa ramane intrebarea initiala: "cum pot scrie o aplicatie UI in cod C++ pur?"George92 wrote:Dupa mine Qt e cea mai buna optiune , are o documentatie super buna si este si cross-platform asa cum doresti
Ovidiu
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
-
- Membru++
- Posts: 919
- Joined: 23 Jul 2007, 11:32
Re: C++ User Interface
Doua intrebaricuriosul wrote:un cod care sa nu mai depinda de sistemul de operare (gen VC++ - .Net)

Re: C++ User Interface
Cred ca ce vroia el sa zica, este faptul ca vrea sa realizeze din cod interfata si nu prin intermediul unor tooluri cu drag & drop si cod generat automat ( gen Qt Designer ).
- Ovidiu Cucu
- Fondator
- Posts: 3778
- Joined: 11 Jul 2007, 16:10
- Judet: Iaşi
- Location: Iasi
- Contact:
Re: C++ User Interface
Posibil, insa eu cred mai degraba ca prin "C++ pur", curiosul s-a gandit la acele programele in consola cu oaresce declaratii, expresii, if-uri si bucle, plus un varf de cutit de cin si cout, asa cum se fac la scoala.
Aparent independente de librarii (pardon, sa le zicem "biblioteci", ca sa nu se supere programmerii filologi
).
Numai ca, odata ce am pus un varf de cutit de cin/cout, hopaa... deja am folosit o biblioteca: STL (Standard Template Library). Si cu asta n-am impurificat cu nimic C++ul, din moment ce STL vinde la pachet cu standardul de C++.
Altceva impuritati? Unde, in MFC, Qt si altele asemenea? Nu prea, sunt si ele scrise in "C++ pur". Ca folosim oarece clase si functii de acolo nu inseamna ca ne murdarim pe maini.
Clasele si functiile fac si ele parte din limbajul C++ (pur).
E mai clar acum de ce am intrebat?
@neagu_laurentiu: good catch! Intradevar, .NET-ul n-are treaba cu C++ul (pur). Contine acel C++/CLI care e C++ doar cu numele.
@George92 & Marius Bancila: eu unul n-as recomanda nimanui sa sara de la consola direct la Qt sau alte strutzocamile "cross-platform".
@curiosul: VC++ (Visual C++) nu este un limbaj de programare ci un IDE (Integrated Development Environment).
Aparent independente de librarii (pardon, sa le zicem "biblioteci", ca sa nu se supere programmerii filologi

Numai ca, odata ce am pus un varf de cutit de cin/cout, hopaa... deja am folosit o biblioteca: STL (Standard Template Library). Si cu asta n-am impurificat cu nimic C++ul, din moment ce STL vinde la pachet cu standardul de C++.
Altceva impuritati? Unde, in MFC, Qt si altele asemenea? Nu prea, sunt si ele scrise in "C++ pur". Ca folosim oarece clase si functii de acolo nu inseamna ca ne murdarim pe maini.
Clasele si functiile fac si ele parte din limbajul C++ (pur).
E mai clar acum de ce am intrebat?
@neagu_laurentiu: good catch! Intradevar, .NET-ul n-are treaba cu C++ul (pur). Contine acel C++/CLI care e C++ doar cu numele.

@George92 & Marius Bancila: eu unul n-as recomanda nimanui sa sara de la consola direct la Qt sau alte strutzocamile "cross-platform".
@curiosul: VC++ (Visual C++) nu este un limbaj de programare ci un IDE (Integrated Development Environment).
Ovidiu
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
- cristianamarie
- Membru++
- Posts: 480
- Joined: 12 Mar 2009, 18:47
- Judet: Iaşi
- Location: Iasi
Re: C++ User Interface
Nu exista asa ceva. UI-ul trebuie sa implementeze o paradigma a sistemului de operare, care e doar C. Ca exista treburi gen wxWidgets, Qt etc. care implementeaza in C++ ferestre, bucle de mesaj etc., clar ca s-au tot (re)inventat.curiosul wrote:As vrea sa ma lamuresc cu niste "chiestii" din C++ ca de pe google doar partial am iesit din ceata. As vrea sa trec de la aplicatii consola la aplicatii de tip UI.
Intrebarea mea este cum pot scrie o aplicatie UI in cod C++ pur? Adica am vazut in Codeblock wxWidgets, GTK+, Qt si altele care ma ajuta sa fac chestia asta, dar eu ma gandeam la un cod pur c++ care sa poate fi rulat atat pe Windows cat si pe Linux de exemplu (daca este posibil asa ceva), un cod care sa nu mai depinda de sistemul de operare (gen VC++ - .Net).
PS: Am vazut ca wsWidgets si celelalte au suport si pe alte sisteme de operarea, dar alea sunt c++ pur nativ?
Nu stiu ce inseamna pentru tine cod C++ pur - daca vrei doar ce e in standardul C++, ghinion. Nici macar compilarea/linkarea nu sint standard nici ele, si de abia in C++ 11 au aparut ceva chestii care ar implementa treburi OS (gen threads).
Ce pot sa iti spun eu e urmatorul lucru: forget it.
Ca sa iti dau cel mai simplu exemplu: daca ai o fereastra in Windows, aia se distruge cind vrea Windows, nu cind vrei tu. Tu primesti un WM_(NC)DESTROY si acolo chemi tu destructorul obiectului tau mapat pe obiectul de la OS (HWND in cazul nostru) - obiect pe care l-ai pasat in WM_(NC)CREATE si l-ai legat cumva de acelasi HWND.
So:
a) C++
Code: Select all
X* pX = new X;
pX->muttleyDoYourJobIWillGiveYouAMedal();
delete pX;
Code: Select all
hwnd = CreateWindowExW(......, reinterpret_cast<LPVOID>(this)); // this = obiectul nostrul
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
if(msg == WM_NCCREATE) {
X* pX = reinterpret_cast<X*>( ((LPCREATESTRUCTW)lp)->lpCreateParams) );
pX->m_hwnd = hwnd; // set m_hwnd of pX ("bind hwnd to pX")
::SetPropW(hwnd, L"this", reinterpret_cast<HANDLE>(pX)); // bind pX to hwnd
}
else if(msg == WM_NCDESTROY) {
X* pX = reinterpret_cast<X*>(::RemovePropW(hwnd, L"this"));
delete pX;
}
...
return DefWindowProcW(hwnd, msg, wp, lp);
}
Practic... welcome to event-based programming - lucru pe care in C++ nu o sa il gasesti decit in forma unor templates care fac wrap peste uriciuni ca cea de mai sus.
Toate treburile astea (Qt si restul) asta fac in 90% din timp (UI-related, zic, pentru ca mai sint enorm de multe alte chestii in librariile astea in afara de UI): manajeaza lifetime-ul unor obiecte C++ care grupeaza functionalitati. Make no mistake - HANDLE e cel care dicteaza aici, nu this...
Personal, cind vine vorba de UI (sau OS programming in general), C++ nu (mi-)e decit de un singur folos: RAII. Ca sa nu faci scolioza de la atitea if-uri si acolade, e mai convenient sa scrii nistre wrappere in functii care au de-a face cu multe resurse (file, sockets etc.) care mai trebuie si inchise, buffere dealocate, pointeri COM de facut Release etc. si sa lasi destructorii sa faca treaba corect. Si aici sint pitfalls, ca daca s-a chemat intii CoUninitialize si apoi pComObject->Release() you're fucked.
Pure C++? Nu prea cred. Welcome to the LPVOID world

Nuclear launch detected
Re: C++ User Interface
In primul rand multumesc pentru raspunsuri, evident.
Deci ceea ce intelegeam eu prin C++ pur este ceva de genul, un simplu exemplu pentru lucru cu fisiere:
Vreau sa fac o simpla interfata. Decat sa folosesc
pentru deschiderea si citirea dintr-un fisier nu mai bine as folosi:
Adica mi se pare mult mai util cel de-al doilea cod deoarece mi se pare strict specific C++-ului si nu Qt-ului. Pe de alta parte daca vreodata renunt la Qt a doua functie o pot folosi si in wxWidgets de exemplu si oriunde se cere C++.
Ca sa fiu mai clar ziceam C++ pur in sensul ca in spatele unui buton dintr-o interfata sa stea un cod C++ ca si cel "din spatele consolei" doar ca spre exemplu in loc de printf convertim rezultatul si il afisam sub forma de MessageBox sau intr-un obiect spre exemplu...
@George92: Da, cam pe acolo m-am referit.
@Ovidiu Cucu: De ce nu recomanzi totusi trecerea la Qt?
PS: M-am apucat de qt...
Deci ceea ce intelegeam eu prin C++ pur este ceva de genul, un simplu exemplu pentru lucru cu fisiere:
Vreau sa fac o simpla interfata. Decat sa folosesc
Code: Select all
QFile inputFile("test.txt");
if (inputFile.open(QIODevice::ReadOnly))
{
QTextStream in(&inputFile);
while ( !in.atEnd() )
{
QString line = in.readLine();
...
}
}
inputFile.close();
Code: Select all
ifstream file("test.txt");
while(file.good())
{
getline(myfile, line);
if (line!="")
track++;
}
return track;
Ca sa fiu mai clar ziceam C++ pur in sensul ca in spatele unui buton dintr-o interfata sa stea un cod C++ ca si cel "din spatele consolei" doar ca spre exemplu in loc de printf convertim rezultatul si il afisam sub forma de MessageBox sau intr-un obiect spre exemplu...
@George92: Da, cam pe acolo m-am referit.
@Ovidiu Cucu: De ce nu recomanzi totusi trecerea la Qt?
PS: M-am apucat de qt...
Cea mai buna batalie este cea castigata fara lupta.
-
- Membru++
- Posts: 919
- Joined: 23 Jul 2007, 11:32
Re: C++ User Interface
Utilul e una iar ca "ti se pare" e alta !curiosul wrote:Adica mi se pare mult mai util cel de-al doilea cod deoarece mi se pare strict specific C++-ului si nu Qt-ului.
Ambele sunt biblioteci iar functionalitatile exportate sunt dependente pana la urma de sistemul de operare (ca unele sunt scrise sa ruleze pe mai multe platforme e alta chestiune).
Daca tu vrei o biblioteca din standardul C++ pentru GUI atunci, dupa cum ti s-a mai spus, nu exista pentru 1001 motive.
Folosesti o sintagma improprie domeniului in care vrei sa activezi. Limbajul are doar o mana de cuvinte cheie iar restul functiilor/bibliotecilor/claselor/framework-urilor/API-urilor sunt de acelasi rang (produse de diferiti dezvoltatori) iar impreuna formeaza instrumentul de lucru necesar.curiosul wrote: ziceam C++ pur in sensul ca in spatele unui buton dintr-o interfata sa stea un cod C++ ca si cel "din spatele consolei"
Si acolo unde ai designere si generatoare de cod nu inseamna ca nu vei scrie si tu manual ! Ba din contra.curiosul wrote:Da, cam pe acolo m-am referit.
Asa cum tu folosesti sintagma (eronat) "C++ pur" dar te gandesti la STL cam tot asa (insa nu eronat) putem vorbi despre "aplicatiile Windows" ca fiind cele construite cu ajutorul tehnologiilor puse la dispozitie de Microsoft, in cazul de fata WinAPI.curiosul wrote:De ce nu recomanzi totusi trecerea la Qt?
QT abstractizeaza ceea ce inseamna o astfel de aplicatie din perspectiva sistemului de operare si a API-ului pus la dispozitie programatorului. In spatele claselor QT, la implementarea sub Windows, stau aceste functii, principii, metodologii din WinAPI numai ca sunt exportate intr-un format arbitrar si folosite pe mai multe platforme (spre ex. QT emuleaza interfata Windows ori GTK ori altceva si nu e una nativa pe cand wxWidgets face apel la functiile OS-ului in materie de GUI si obtine fara sa vrea interfata nativa). Insa QT fara programatorii ce implementeaza codul specific platformei nu ar exista. Nu inseamna ca e rau ! Fiecare programeaza pe nivelul dorit. Iar daca vrei sa cunosti mai multe despre Windows si programarea pe aceasta platforma atunci nu QT iti dezvaluie "secretele" ci WinAPI cu tot ce inseamna el.
Re: C++ User Interface
Un "standard C++ GUI library" ar fi nice, dar e un ideal greu de realizat (cum recunoaste si Stroustrup: http://www.stroustrup.com/bs_faq.html#gui )
(in Java au incercat asa ceva - AWT, Swing etc si e greu de spus in ce masura au reusit, chiar daca e o singura companie in spate..)
(in Java au incercat asa ceva - AWT, Swing etc si e greu de spus in ce masura au reusit, chiar daca e o singura companie in spate..)
Re: C++ User Interface
@tudor_t: Nici nu stii cat ma bucur ca ai postat link-ul acela. O gramada de alte raspunsuri acolo, o sa-l recomand si altora.
Ca sa trag o concluzie la ce mi-au zis colegii mai sus trec pe wxWidgets. Sper sa fie o decizie buna.
Ca sa trag o concluzie la ce mi-au zis colegii mai sus trec pe wxWidgets. Sper sa fie o decizie buna.
Cea mai buna batalie este cea castigata fara lupta.
- Ovidiu Cucu
- Fondator
- Posts: 3778
- Joined: 11 Jul 2007, 16:10
- Judet: Iaşi
- Location: Iasi
- Contact:
Re: C++ User Interface
O fi, insa eu nu vad in ce au zis colegii mai sus, din ce as trage concluzia ca wxWidgets ar fi o alegere buna.curiosul wrote:Ca sa trag o concluzie la ce mi-au zis colegii mai sus trec pe wxWidgets. Sper sa fie o decizie buna.

Ovidiu
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
-
- Membru++
- Posts: 919
- Joined: 23 Jul 2007, 11:32
Re: C++ User Interface
wxWidgets e intr-o proportie de ~90% asemanator cu MFC. Insa in ultimii ani dezvoltarea merge destul de greu, mai ales de cand QT a adoptat si licenta LGPL iar daca ne uitam la functionalitatile oferite de QT vs. wxWidgets atunci QT castiga detasat.