[ alfa-pro @ 03.02.2012. 15:08 ] @
Drugari jel ima neko ko ima volje i bar malo vremena da mi pojasni malo bolje samu teoriju i kako funkcionisu signali i slotovi u QT Creatoru.
Citao sam DOC na njihovom sajtu i pokusavao sam da uradim nesto ali opet ne kapiram.
Gledao sam ovaj dijagram :
http://developer.qt.nokia.com/...mages/abstract-connections.png
i kao nesto razumem ali opet ne dovoljno.

Znam cemu sluze, najvise me buni sledece.

Kada napravim neko push dugme na nekoj formi(right-click->go to slots->{akcija}{on_clicked()}
On mi napravi u main.cpp funkciju za klik

Code:
void GlavniProzor::on_findButton_clicked()
{
    //bla bla bla 
}


i u header.h mi definise privatni slot

Nemogu da ukapiram sta je tacno SLOT a sta je SIGNAL u QT. Jednostavno nemogu da povezem sta se i sa cime povezuje. Signal sa slotom ili slot sa signalom. Sve mi se pomesalo
Stvarno mi se napravila neka pobuna u glavi pa ako neko moze po srpski da mi pojasni ili prikaze primer. Preporucljivo da je na srpskom.

Hvala momci unapred.

[Ovu poruku je menjao alfa-pro dana 03.02.2012. u 16:18 GMT+1]
[ glorius @ 03.02.2012. 19:57 ] @
Moja preporuka je da za pocetak nadjes neku (e-)knjigu za Qt 4 posto tu mozes naci primere sa signalima i slotovima i objasnjenje kako sve to funkcionise.
[ Nedeljko @ 03.02.2012. 20:04 ] @
Signal se emituje kao informacija da se nešto desilo. Slotovi povezani sa njim su akcije koje treba preduzeti. Telo signala nikada ne implementiraš, jer njega implementira Qt-ov moc (meta object compiler) i možeš tu implementaciju vodeti u generisanim moc_*.cpp datotekama, a telo slota Qt-ove alatke nikada ne implementoraju. Ti možeš u svom kodu da emituješ signal, a ne i da ga implementiraš.
[ alfa-pro @ 03.02.2012. 20:58 ] @
@Nedeljko

Signal se emituje kao informacija da se nešto desilo. Slotovi povezani sa njim su akcije koje treba preduzeti. Telo signala nikada ne implementiraš, jer njega implementira Qt-ov moc (meta object compiler) i možeš tu implementaciju vodeti u generisanim moc_*.cpp datotekama, a telo slota Qt-ove alatke nikada ne implementoraju. Ti možeš u svom kodu da emituješ signal, a ne i da ga implementiraš.

Izvini ali ja i dalje nemogu da te razumem, moze neki code primer?
Npr. kako ja to kapiram:

Imam na formi neko push dugme kome dodelim slot klik->show. Nakon dodeljivanja slota generise mi se C++ funkcija i u toj funkciji ja definisem akciju sta da se desi kada neko stisne to push dugme (npr. pop up window ('hello Elitesecurity');

Po mom misljenju znaci slot je akcija nekog objekta(npr. ako ja kliknem na pushBTN_1 pozovi funkciju onClick_pushBTN_1{}) {if($a == 0){return True;}
Ispravi me ako gresim?

E sada sta u celoj ovoj prici je signal? Kakvu ulogu ima on?
Jel to ono Connect itd?

Ja kada definisem slot direktno u form gui desingeru onda podesavam onu crvenu strelicu gde da se emituje taj npr. window posle press buttona. Neznam dali me razumes?



[ Nedeljko @ 04.02.2012. 15:51 ] @
Pa, kad si tako radio, onda naravno da ne vidiš gde je uloga signala.

Pogledaj u generisani ui_*.h fajl i u setupUi metodi ćeš naći poziv funkcije QMetaObject::connectSlotsByName(). Pogledaj u njenu dokumentaciju. Ako si npr. imao glavni prozor koji se zove MainWindow i na njemu dugme pushButton, a klasa glavnog prozora ima slot on_pushButton_clicked(), onda će poziv funkcije QMetaObject::connectSlotsByName(MainWindow) zapravo izvršiti funkciju QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(on_pushButton_clicked())).

U ovom slučaju, kada se klikne na dugme, onda to dugme emituje signal clicked(), a posledica toga je izvršavanje slotova povezanih sa tim signalom.
[ _ikac @ 05.02.2012. 09:58 ] @
Skontao sam kako funkcionise, samo je trebalo malo vise prakse i samo je doslo po sebi.

Napravim pushButton

u main.h definisem slotove

Code:
public slotis:
      void uradiNesto();
      void josNesto();


Onda moram da definisem u kom rezimu SLOTU se pokrece akcija i sta da pozove koju metodu SIGNAL u main.cpp

Code:
connect(ui->pushBtn, SIGNAL(clicked(), this,(SLOT(uradiNesto()));
connect(ui->pushBtn, SIGNAL(clicked(), this,(SLOT(josNesto()));


i onda definisem akciju ovih metoda posto sam povezao dugme i definisao na klik koja akcija da se pozove.

Code:

void MainWindow::uradiNesto(){
      ui->label->setText("Welcome to EX");
}


Ja mislim da je sada to ono sto me je mucilo.
Malo mi je tesko nov sam u QT FW pa citam DOC i ima brdo toga sto mi nije jasno pokusavam na svoj nacin i pomocu googlea ali ono sto mi neide u glavu onda pitam.

Hvala Nedeljko
[ Nedeljko @ 05.02.2012. 11:14 ] @
Super, shvatio si.