Qt/C++ Hesap Makinesi Uygulaması

  Örnek bir uygulama olması açısından bir hesap makinesi yapalım. Yeni bir proje oluşturarak görsel düzenlemeyi aşağıdaki gibi yapalım.



    Görsel düzenlemeler zevkinize kalmış bir durum. Benim yaptığım düzünlemeler ise şöyledir;

Butonların hepsini seçerek policy özelliklerini ignored olarak düzendikten sonra gridlayout kullandım. 

Üstteki Label için max height 30px, alttaki labe için max height 50px ayarladım. ayrıca alttaki label için 12punto ve kalın yazı tipini seçtim. Her iki label için hizalamayı sağa ayarladım. 

Form gövdesine verticallayout uygulayarak min size özelliğini 150x250px olarak ayarladım. Varsayılan boyu ise 250x350px değerinde...

Stylesheet kullanarak görsel zenginleştirme mümkün ancak şimdilik burada bırakalım ve kodlama kısmına odaklanalım. 


    1 butonundan başlayalım. Buton üzerine sağ tıklayarak Go to slot u seçelim.


Karşımıza gelen pencereden clicked() i seçelim.


 Kod yazacağımız fonksiyon hazır olarak karşımıza gelecektir. Sinyal/Slot bağlantısı otomatik yapıldı. Bize düşen sadece kod yazmak olacak...


 1 butonuna basınca mevcut olan text e 1 eklemeliyim. O halde kodu yazalım.



    Ancak bir sorun var ilk baştaki sıfırın silinmesini istiyorum. O halde bir if yapısı ile kontrol sağlayalım. "1" karakterini de bir değişkenden çekelim....


    İstediğimiz oldu... Şimdi klavyeden 1 tuşuna basıldığında da aynı fonksiyonun çalışmasını istiyorum. Bunun için QKeyEvent sınıfından faydalanmalıyım. Header dosyasına keyPressEvent fonksiyonunu yazalım. 



    Cpp Dosyasına QKeyEvent sınıfını include edelim ve keyPressEvent  fonksiyonunun içeriğini oluşturalım.

1 tuşuna basılmış ise 1 butonun fonksiyonunu çağırdık. Bu aşamada kodu tüm rakam tuşları kapsayacak şekilde kopya yapıştır ile düzenleyip geliştirelim. Bu sırada sıfır için yine özel bir durum olduğunu fark ettim. Label içeriğimiz hali hazırda sıfır ise sıfır eklememeliyiz... 


C tuşunun fonksiyonunu yazalım. Tasarıma yardımcı (üstteki) bir label eklemiştik. rakalmarımızı silmeden önce sonucu (daha hesaplamasakta...) labek_ek e aktarıp label ı sonra silelim. Label zaten 0 ise label_ek i de silelim... (biraz karıştı sanki :))



Nokta butonunun fonksiyonunu yazalım. Burada da özel bir durum var. label nokta var ise nokta eklememeliyiz... Bu durumu kontrol etmek için contains() fonksiyonundan yararlanıyoruz. 



Geri tuşunu kodlayalım. Mevcut text bir karakterden uzun ise soldan uzunluk-1 kadarını alıyoruz. Aksi durumda karakteri "0" olarak set ediyoruz.


+/- tuşunu kodlayalım. Normalde ilk karakterimiz her zaman rakam ve sayı pozitif. O halde if yapımız şekillendi bile... ilk karakter rakam ise "-" işareti koy, değil ise zaten "-" işareti vardır... ilk karakteri sil...



Hesaplama tuşları dışındaki bölümü bitirdik. Bu aşamada hesaplama kısmını nasıl tasarlayacağımıza karar vermeliyiz. Bir rakam yazdık sonra + tuşuna basınca ekran davranışımız nasıl olmalı..?  rakamı ve işlem operatörünü yardımcı label a atalım. Tabi bu arada rakamı bir değişkende saklayalım...



    Bu aşamada ön göremediğim bir sorun ortaya çıktı. Toplama işlemine basınca ekrandaki rakamı silmeli miyim yoksa durmalı mı... Normal hesap makinesinde rakam duruyor ancak yeni rakam yazmaya başlayınca önceki rakam siliniyor... Aynı yöntemi kullanmaya karar vererek bir reset fonksiyonu yazdım. 


Ek olarak tüm rakam butonlarının başına bir koşul ekledim. 





    Diğer butonlar içinde aynı düzenlemeleri yapalım. İşlem yapmıyoruz. Sadece işlem için hazırlık yapıyoruz. Sonuc "=" butonu için fonksiyonumuzu yazalım. Bu fonksiyon ile yardımcı göstergeden önceki işlem tipini tespit ediyoruz. Ayrıca yeni girilen ikinci sayıyı alıyoruz.


Toplama işlemi için fonksiyonumuzu yazalım.


İşaretleri değiştirerek diğer işlemler için aynı kodu yazalım... Ve hesap makinemiz tamam...



Hazır orangle  stylesheet ile görsel zenginlik yaratalım. 



    İlk defa bir hesap makinesi yaptım. Konu 2+3=5 kadar kolay görünürdü gözüme ancak işin içinde biraz detay varmış...

Yorum Gönder

Daha yeni Daha eski