Šta je novo?

Kde programiranje - Kde vs. Qt biblioteke

Mrav

Čuven
Učlanjen(a)
28.04.2002
Poruke
87
Poena
609
Evo uzeo sam neke knjige za programiranje na Linuxu. Posto programiram u c++ prirodno okruzenje mi je Kde (koji se na njemu bazira). Medjutim imam neke doumice oko toga koje biblioteke da koristim i prve ucim (naravno kasnije cu morati da ih sve naucim), Kde biblioteke ili Qt biblioteke. Koliko sam shvatio za ovo kratko vreme Kde klase se u stvari baziraju i izvedene su iz Qt klasa, u samim programima obe se ponasaju veoma slicno (QMainWindow = KMainWindow?). Zasto onda koristiti jedne a ne druge? Neka me neko uputi na ove razlike.
Drugo imao sam ovakav program (pocetnicki ;) ):
//Pseudo kod:
int main(tralala)

KApplication myapp(tralala);
KMainWindow window;

podesavaju se prozor i on se dodeljuje kao glavni widget myapp-u
i prozor se prikazuje.

return myapp.exec(); //ovo mora da bude tu!
}

medjutim kada pokusam da startujem ovaj program (uspesno se kompajlira) nece da startuje i u konzoli prikaze poruku da KCmdLineParam (ili kako se vec zove klasa , ko zna znace) ::init() funkcija nikada nije pozvana i prijavljuje ovo kao gresku?
Kada se konstruktoru KApplication pored argc i argv (ulaza sa komandne linije) doda i parametar naziva aplikacije u obliku stringa "aplikacija" program se uspesno startuje , uradi ono sto treba (sto je za sada samo prikazivanje praznog prozora) ali kada se aplikacija ugasi pozove se Kde Crash Handler ? Znaci u ovom obliku aplikacija pada?

Medjutim kada napisem isti taj program (istog oblika) samo sa qt include fajlovima i klasama (KApplication zamenjujem sa QApplicaiton, KMainWindow sa QMainWindow ne menjajuci f-je clanice koje se pozivaju) sve radi kako treba jel zna neko o cemu se ovde radi?

BTW: pozdravljam postavljanje Benchmarka na Linux baziran server, to mora da je bar 50% od razloga zasto je npr forum poleteo
(D)
 
Prvi savet: koncentrisi se izradu cistih Qt programa i batali kdelibs za pocetak. Uvezuj samo dodatne biblioteke kada i ako ti zatrebaju (SDL, itd). Kdelibs klase su stvarno dosta "nakicene" i samo ces se izgubiti u moru parametara i opcija.
Uostalom, cisti Qt postoji i na windows i na mac platformi, tako da je portabilnost jos jedna stavka plus za Qt.

Razlog za ovo stucanje sa parametrima je u tome sto se KApplication tehnicki startuje sa parametrima, koji se koriste za KAboutData. U principu, to ti i ne treba. Mozes sasvim lako da izmenis strukturu maina da ne koristi argc i argv, te konstruktoru KApplicationa da posaljes neke fixne vrednosti (neke svoje konstante). Naravno, ako ne planiras da korisis parametre iz komandne linije u svom programu.

return myapp.exec() vraca error id programa -> isti princip kao i u dosu/windowsu, dakle 0 znaci "nije bilo gresaka". Kada se startuje objekat aplikacije (mora da postoji samo jedan, dok mailwidget mozes da menjas), startuje se message loop (osnovno je znanje sta je message loop) i iz njega se izlazi sa exit. Parametar koji se daje exitu se prosledjuje kao rezultat execu. Nula se vraca ukoliko se izaslo sa quit() iz aplikacije.

Razlog za crash moze da se nadje na vise mesta; ukoliko koristis KDevelop, KDEstudio ili neki treci editor/ide, i kreiras osnovni kostur pomocu njihovog projekt-generatora, obrati paznju na destruktore klasa - obicno su samo prazne { } funkcije. Mozda je potreban neki clean-up kod koji ce da ocisti/oslobodi memoriju. Imas lepi aboutToQuit() signal, za koji lepo napravis cleanup slot. Takodje, vrlo je bitan redosled kreiranja i ubijanja objekata. Ovo se posebno odnosi na objekte koji nemaju parent objekat koji bi inicirao kaskadno 'ubijanje' objekata. A moguce je i obratno - objekat je 'ubiven', pa pokusavas da mu pristupis nakon toga (bez asserta, naravno).
 
Hvala, sada se vidi ko je ovde pravi programer:D
 
Vrh Dno