Qt signals and slots for newbies/tr: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
[[Category:NasilYapilir]]<br />[[Category:Qt_Ile_Gelistirme::Genel]]<br />[[Category:Ogreticiler]]
'''Türkçe''' [[How-to-use-signals-and-slots|English]]
'''Türkçe''' [[How-to-use-signals-and-slots|English]]


=Giriş=
= Giriş =


Qt üzerinde bulunan Sinyal ve Slot mantığı aslına bakarsanız oldukça basit bir ikilidir. Bu şuna benzer, bir sinyal gönder ve bir slot karşılasın.
Qt üzerinde bulunan Sinyal ve Slot mantığı aslına bakarsanız oldukça basit bir ikilidir. Bu şuna benzer, bir sinyal gönder ve bir slot karşılasın.
Line 8: Line 10:


Slot ise bu durumun tam tersidir. Yani bir sinyal oluştuğunda çalışacak hali hazırda ki bir fonksiyonda olabilir, içeriği tarafımızca doldurulacak bir fonksiyonda olabilir. Bu hemen aklınızı karıştırmasın hali hazırda derken, eğer bir liste kutusunu boşaltacaksanız, zaten hali hazırda clear fonksiyonunu bir slot olarak çağırarak liste kutusunu boşaltabilirsiniz. Tabi bunu kendi belirlediğimiz bir fonksiyonu çağırarak onun içinde de sildirebiliriz. Hemen bir slot için kod örneği verelim.
Slot ise bu durumun tam tersidir. Yani bir sinyal oluştuğunda çalışacak hali hazırda ki bir fonksiyonda olabilir, içeriği tarafımızca doldurulacak bir fonksiyonda olabilir. Bu hemen aklınızı karıştırmasın hali hazırda derken, eğer bir liste kutusunu boşaltacaksanız, zaten hali hazırda clear fonksiyonunu bir slot olarak çağırarak liste kutusunu boşaltabilirsiniz. Tabi bunu kendi belirlediğimiz bir fonksiyonu çağırarak onun içinde de sildirebiliriz. Hemen bir slot için kod örneği verelim.
<code>…<br />connect(buton1, SIGNAL (clicked()), liste1, SLOT (clear()));<br />…</code>


Burada gördüğünüz gibi buton1 nesnesinin tıklanma olayını direk olarak liste1 nesnesinin clear fonksiyonuna bağlayarak ayrıca bir fonksiyon oluşturup oradan çağırmak zorunda kalmadık. Tabi bunu ayrıca yapmamız da mümkündü. Örneğin,
Burada gördüğünüz gibi buton1 nesnesinin tıklanma olayını direk olarak liste1 nesnesinin clear fonksiyonuna bağlayarak ayrıca bir fonksiyon oluşturup oradan çağırmak zorunda kalmadık. Tabi bunu ayrıca yapmamız da mümkündü. Örneğin,


Gördüğünüz gibi Qt içerisinde klasik programlamada örnekteki gibi alışıla gelmiş event tabanlı fonksiyonlardan ilgili nesnenin fonksiyonunu çağırmak yerine direk başka bir nesneye ait bir fonksiyonuda önceki örnekteki gibi bağlayabiliyoruz. Buda bize bir avantaj olarak dönebiliyor. Tabi siz yine alışılagelmiş yöntemleri kullanabilirsiniz.
<code><br />…<br />connect(button1, SIGNAL (clicked()), App, SLOT (button1_click()));<br />…
 
===Categories:===


* [[:Category:NasilYapilir|NasilYapilir]]
App::button1_click() {<br />liste1.clear();<br />}</code>
* [[:Category:Ogreticiler|Ogreticiler]]
* [[:Category:Qt Ile Gelistirme|Qt_Ile_Gelistirme]]
** [[:Category:Qt Ile Gelistirme::Genel|Genel]]

Revision as of 10:17, 24 February 2015



Türkçe English

Giriş

Qt üzerinde bulunan Sinyal ve Slot mantığı aslına bakarsanız oldukça basit bir ikilidir. Bu şuna benzer, bir sinyal gönder ve bir slot karşılasın.

Bunu biraz daha açıklayıcı bir şekilde anlatalım. Bir buton düşünün ve siz onun üzerine tıkladınız. Bu durumda bir sinyal oluşur, hatta fareyi butonun üzerine götürdüğünüzde bile oluşur. Ancak her oluşan sinyali değil istediğimiz sinyal bizi ilgilendirmektedir. Butona tıkladığımızda oluşan sinyal için birşeyler yapmamız gerektiğini düşünüyorsak işte çözüm şudur ki, bir slota bu sinyali göndermek! Evet sinyal bir olayın oluştuğunu belirten güzel bir tetikleyicidir. Bu sadece UI üzerindeki bir buton değil bir e-posta gönderiminin tamamlanması gibi arkaplanda ki işlerde dahi oluşur. Ancak oluşan bu bir çok sinyal bizim için bir mana ifade etmeyebilir. Üretilen sinyallerden istediğimizi belirlemek ve bunun karşısında birşeyler yapmamız gerekebilir.

Slot ise bu durumun tam tersidir. Yani bir sinyal oluştuğunda çalışacak hali hazırda ki bir fonksiyonda olabilir, içeriği tarafımızca doldurulacak bir fonksiyonda olabilir. Bu hemen aklınızı karıştırmasın hali hazırda derken, eğer bir liste kutusunu boşaltacaksanız, zaten hali hazırda clear fonksiyonunu bir slot olarak çağırarak liste kutusunu boşaltabilirsiniz. Tabi bunu kendi belirlediğimiz bir fonksiyonu çağırarak onun içinde de sildirebiliriz. Hemen bir slot için kod örneği verelim.

<br />connect(buton1, SIGNAL (clicked()), liste1, SLOT (clear()));<br />

Burada gördüğünüz gibi buton1 nesnesinin tıklanma olayını direk olarak liste1 nesnesinin clear fonksiyonuna bağlayarak ayrıca bir fonksiyon oluşturup oradan çağırmak zorunda kalmadık. Tabi bunu ayrıca yapmamız da mümkündü. Örneğin,

<br /><br />connect(button1, SIGNAL (clicked()), App, SLOT (button1_click()));<br />

App::button1_click() {<br />liste1.clear();<br />}