Početak›Forumi›Linuks›Programiranje›Qt Dialogs
- This topic has 10 odgovora, 3 glasa, and was last updated 15 years, 11 months ranije by jboban.
-
AutorČlanci
-
2. maj 2008. u 5:57 pm #10048burgaUčesnik
Kako da iz QtDialoga izvučem neku povratnu vrednost a da to nije Qt::Accepted i Qt::Rejected. Konkretno, imam dijalog koji sadrži listu QDateTimeEdit-ova i hoću da mi se vrati lista QDateTime-ova. Ne bih da koristim connect za svaku promenu, a nije mi jasno zašto si standardni dijalozi idu preko statičkih funkcija. Na kraju, može li to modeless dijalogom ako ne može modalnim?
5. maj 2008. u 12:07 pm #69626jbobanUčesnikQt::Accepted i Qt::Rejected dobijaš kao povratnu vrednost od samog poziva, ali možeš da dodaš razne getOvo(), getOno() metode.
Svaki tvoj dijalog je izveden iz QDialog-a. Kao i u svakoj drugoj klasi deklarišeš metode i podatke članove. Pristupaš im isto kao i u svakoj drugoj klasi. Dakle, tvoj klasa je npr. class MyDialog: public QDialog. Dodaš podatke članove npr. int m_nVal1, int m_nVal2 i metode int getVal1() const { return m_nVal1; } i int getVal2() const { return m_nVal2; } i sl.
5. maj 2008. u 8:28 pm #69627burgaUčesnikSve je to u redu, ali evo pratičnog primera. Recimo da imam
MojaKlasa MojDijalog::getOno() const;Onda u matičnom prozoru pozovem MojDijalog(this); i kažem
[code]if (instancaMojegaDijaloga.exec()==QDialod::Accepted)
ono = instancaMojegaDijaloga.getOno()
[/code].Praktično pitanje je da li još uvek postoji instancaMojegaDijaloga kada se završi exec funkcija?
5. maj 2008. u 8:43 pm #69628RiSKUčesnikDa, naravno.
“instancaMojegaDijaloga” je validna promenljiva u delu iza naredbe if. Kako je ovo staticka promenljiva, objekat je smesten na steku i instanca postoji u celoj metodi (ili sta je vec) u kojoj je definisana ova promenljiva, a brise se na kraju metode.6. maj 2008. u 12:53 am #69629jbobanUčesnik“instancaMojegaDijaloga” je validna promenljiva u delu iza naredbe if.
Ne, ona je validna i ispred if() jer je ispred i nastala. U if() se samo izvršava jedna od njenih metoda (exec).
Kako je ovo staticka promenljiva, objekat je smesten na steku i instanca postoji u celoj metodi
Obično nije statička već dinamička ili kao podatak član neke druge klase.
Oblast važenja je ista kao i za svaki drugi tip promenljive, npr. int, a zavisi od načina deklarisanja. Najšešći način je kada je u nekoj drugoj, glavnoj ili ne, klasi definisan pointer na dijalog klasu kao MyDialog *m_dlgMain; Onda u konstruktoru te klase se instancira kao m_dlgMain = new MyDialog(…); Ovako je m_dlgMain vidljiv unutar cele nadredjene klase.6. maj 2008. u 8:30 am #69630RiSKUčesnik[quote=”RiSK”]
“instancaMojegaDijaloga” je validna promenljiva u delu iza naredbe if.Ne, ona je validna i ispred if() jer je ispred i nastala. U if() se samo izvršava jedna od njenih metoda (exec).
[/quote]Slazem se. Samo je covek pitao da li je vazeca nakon poziva metode exec, tj iza if naredbe. Zato sam srocio ovako.[quote=”RiSK”]
Kako je ovo staticka promenljiva, objekat je smesten na steku i instanca postoji u celoj metodiObično nije statička već dinamička ili kao podatak član neke druge klase.
Oblast važenja je ista kao i za svaki drugi tip promenljive, npr. int, a zavisi od načina deklarisanja.
[/quote]
I sa ovim se slazem, ali je u gornjem primeru staticka. Obrati paznju na operator (.) pri pozivanju metode exec. I takodje kazem da je dobra praksa sve koristiti pointere za sve objekte i dinamicki ih alocirati.6. maj 2008. u 4:35 pm #69631burgaUčesnikMa to se tiče pokazivača, sve i radim preko njih. Nego me kopka još jedna stvar upravo oko steka i slobodnog memorijskog prostora. Recimo da imam klasu MojaKlasa koja sadrži promenljivu članicu NekaKlasa članica (dakle, ne kao pointer). Ako sada tu klasu instanciram preko pokazivača (MojaKlasa * mojaInstanca = new MojaKlasa()) šta je na steku a šta u slobodnoj memoriji?
6. maj 2008. u 6:53 pm #69632RiSKUčesnikPa na steku ostaje samo pointer na instancu MojaKlasa. Sve ostalo je na heapu
(ako sam dobro razumeo sta si napisao :))6. maj 2008. u 8:50 pm #69633jbobanUčesnikšta je na steku a šta u slobodnoj memoriji?
Moj ti je savet da o tome ne razmišljaš bez debelog razloga. Davno su prošla ta vremena. Ako baš imaš razlog, navedi da tumačimo…
6. maj 2008. u 9:16 pm #69634burgaUčesnikPa radi se o sledećem: u jednoj klasi mi se kao promenljiva članica nalazi lista od 4500 objekata, tako da čak i sa 512MB RAMa može da mi iskrsne pitanje memorije…
-
AutorČlanci
Moraš biti prijavljen da bi postavio komentar u ovoj temi.