Qt signals and slots for newbies/tr
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
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.
…
connect(buton1, SIGNAL (clicked()), liste1, SLOT (clear()));
…
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,
…
connect(button1, SIGNAL (clicked()), App, SLOT (button1_click()));
…
App::button1_click() {
liste1.clear();
}