GUI Nedir?
Açılımı "Graphical User Interface" olan GUI, grafiksel kullanıcı arayüzü anlamına gelir. C ve C++ ile ilgilendiyseniz konsol ekranını bilirsiniz. C++'da bir uygulama yaptığımızda bu uygulama siyah bir konsol ekranından ibaret olacaktır. Uygulamamızda buton, checkbox, radiobutton gibi nesneler olmayacaktır. Bu simsiyah konsol ekranı kullanıcıların işini zorlaştıracak ve oluşturduğunuz programın görünüşünü kötü etkileyecektir. Grafiksel kullanıcı arayüzü ile siyah konsol ekranına komut girerek uygulamayı harekete geçirmeye gerek yok. GUI sayesinde, uygulama geliştirirken butonlar, etiketler (yani label), pencereler gibi bir çok şey kullanabiliriz. Sadece fare ve klavye ile kontrol edilebilen bir uygulama, konsol ekranına komutlar girilerek işleyen bir konsol uygulamasından çok daha iyidir.
C++'da GUI Uygulamalar Nasıl Geliştirilir?
C++ dilinde görsel arayüzlü uygulama geliştirmek için önce ne yapacağınıza karar vermelisiniz? Oyun ya da masaüstü uygulaması. Oyun geliştirmek için OpenGL ve ya DirectX (Bu arada OpenGL ve DirectX birbirlerinin en büyük rakipleridir) kütüphanelerini kullanabilirsiniz.Sadece bunlarla sınırlı değil diğer kütüphaneleri de kullanabilirsiniz (mesela Qt) ama oyun için en uygunu ve büyük firmalar tarafından da en çok kullanılanları bunlardır Özellikle de DirectX. Bu arada directx'i Microsoft'da kendi oyunlarında kullanmaktadır. DirectX destekli olan bazı oyunlar da şunlardır: Crysis2, Fear3, world of warcraft, Dirt3, vs. (araştırırsanız daha fazlasına ulaşabilirsiniz).
Eğer amacınız oyun yapmak değilse yani bir masaüstü uygulaması yapmak için Qt, GTK, MFC gibi kütüphaneleri kullanmak daha uygun olacaktır. Ben Qt'yi tercih ederim. Qt kütüphanesini kullanmak için Qt Creator ve ya Code::Blocks gibi IDE'leri kullanabilirsiniz. Bir de Monkey Studio diye bir IDE var onu da kullanabilirsiniz. Linux 'un Ubuntu dağıtımını kullanıyorsanız, "ubuntu software" den code::blocks ve monkey studio'yu indirebilirsiniz beş on saniyede kurulacaktır.
C++ konusunda en başarılı gördüğüm IDE'lerden biri Code::blocks'tur. Code::blocks'u OpenGL, GTK, DirectX gibi grafik kütüphaneleri için de kullanabilirsiniz. Bu konuda Qt Creator'u tavsiye ederim. Çok gelişmiş bir IDE yani tümleşik geliştirme ortamıdır.
Qt Creator
Qt Creator IDE sayesinde çok daha kolay ve hızlı şekilde grafik arayüzlü C++ uygulamaları oluşturulabilir. Qt Creator şüphesiz alanında en iyi IDE'lerden biridir. İki sürümü vardır:
1-Commercial (ticari)
2-Open Source (açık kaynak)
Bu iki sürümden ilki yani ticari olan sürüm paralıdır ve indirip 30 gün ücretsiz kullanabilirsiniz ama sonrasında satın almanız gerekir (fiyatı da az değil çok fazla). Bu iki versiyon arasındaki farklara göz atmak isterseniz ---> (https://info.qt.io/download-qt-for-application-development).
Biz ücretsiz olan open source (açık kaynak) versiyonu kullanacağız. İndirme linki aşağıda.
https://www.qt.io/download-open-sou...c207fd03|d62710cd-e1db-46aa-8d4d-2f1c1ffdacea
Ubuntu kullanıyorsanız Terminal'i (uç birim) açın ve aşağıdakileri yazın.
wget http://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-linux-x64-5.7.0.run
chmod +x qt-opensource-linux-x64-5.7.0.run
./qt-opensource-linux-x64-5.7.0.run
Şimdi olması lazım olmuyorsa sisteminizi güncelleyip tekrar deneyin. Ya da manuel şekilde indirip kurun. Qt Creator'u kurduysanız çalıştırın. Resimdeki gibi bir ekran gelecek. New Project seçeneğine tıklayın ve yeni bir proje oluşturun.
New Project'e tıklayınca ekrana bir pencere gelecek. Choose'ye tıklayın
Sonra uygulamanızın adını yazın ve next'e tıklayın.
Sonra next, next... finish seçeneklerine tıklayın ve karşınızda kodların yazılı olduğu bir pencere gelecek.
Yukarıdaki resimde görüldüğü gibi ekranın sol tarafında bazı dosyalar var. Bunlardan Forms klasörüne iki kere tıklayın. Forms'un içinde mainwindow.ui adlı dosyaya çift tıklayın.
Yukarıdaki gibi bir ekran çıkacak. Sağ tarafta istediğiniz nesneyi sürükleyip formun üzerine bırakabilirsiniz. Mesela ilk uygulamayı yapalım. "Push Button" nesnesini sürükleyip formunuza bırakın (nesnelere çift tıklayarak adını değiştirebilirsiniz).
Şimdi butona tıklayınca yazı yazdıran bir program yapalım. Öncelikle sağ taraftaki "mainwindow.ui" seçeneğine çift tıklayarak formun designe (tasarım) kısmını açın ve forma bir label, bir tane de Push Button nesnesi ekleyin. Form ilk açıldığında label'da yazı yazmaması gerekiyor çünkü butona tıklayarak yazıyı biz yazdıracağız. Form ilk açıldığında formda yazı olmayacak. Bunun için label'a çift tıklayıp üzerindeki TextLabel yazısını silelim. Sonra Push Butona sağ tıklayıp Go to slot seçeneğini tıklayalım ekrana küçük bir pencere gelecek. Burada butonun click event'ları yani butona tıklama olayları yazıyor.
https://i.hizliresim.com/dGobYp.png
Burada "clicked()" seçeneği butona tıklama olayıdır. Diğer önemli bazı şeyleride açıklayayım. Mesela pressed() seçeneği press, sıkıştırma demektir butona bastığınız an gerçekleşir. Altındaki released() seçeneği butonu bırakma olayıdır. Yani butona basılı tutup bıraktıktan sonra gerçekleşecek olaydır. Önemli olan tıklama olaylarını açıkladık. Şimdilik bu kadarı yeterli. Şimdi şöyle bir uygulama yapalım. Butona basılı tutunca ekrana c++ yazdırsın ve butonu bıraktığımız an yazı kaybolsun. Bunu yapmak için önce butona sağ tıklayıp Go to slot diyelim ve pressed() seçeneğini işaretleyerek next'e tıklayalım. Karşımıza kodlar çıkacak. Şu kodları yazalım (birinci, ikinci ve son satırdaki süslü parantezli olanlar otomatik olarak yazılacak zaten)
Aşağıda **** yazan yer m a i n olacak (boşluksuz)
**** MainWindow:
n_pushButton_pressed()
{
ui->label->setText("C++");
}
Siz sadece şu kodu süslü parantezlerin arasına yazın: ui->label->setText("c++");
Bu kod ile label'a tırnak işaretinin içinde olan C++ yazısı yazdırılır
Şimdi sol taraftaki mainwindow.ui dosyasına çift tıklayarak formun designe (tasarım) kısmını açalım ve butona tekrar sağ tıklayıp Go to slot'a basalım. Bu sefer çıkan pencereden released() seçeneğini seçelim ve süslü parantezlerin içine şu kodu yazalım:
ui->label->setText(" ");
Bu kod, butonu bırakınca label'ın text özelliğini tırnak işaretindeki değer ile değiştirir. Tırnak içinde hiçbir yazı olmadığından butona basmayı bırakınca c++ yazısı kaybolacak. Şimdi işimiz bitti artık projeyi derleyebiliriz. Pencerenin sol altındaki yeşil üçgene basarak çalıştırın. Ve ya uygulamayı çalıştırmak için üstteki "Build" seçeneğine basıp "Run" kısmına tıklayabilirsiniz. Ubuntu kullanıyorsanız ve "cannot find -lGL" gibisinden bir hata aldıysanız Terminali açıp aşağıdakini yazıp enter'a basın ve işlem bitince tekrardan çalıştırın:
sudo apt-get install libgl1-mesa-dev
Uygulama açılınca bir pencere çıkacak ve üstündeki butona tıklayınca ekrana "C++" yazısı gelecek ve butona basmayı bırakınca yazı geri gidecek.
Butona basılı tutulduğunda:
Butonu bıraktıktan sonra:
Bu şekilde istediğiniz yazıyı yazdırın mantık aynı
Bu arada C++'ı temel düzeyde bilmenizde fayda var. Qt ve GUI sadece bundan ibaret değil tabikide daha bir çok şey var. Bu sadece Qt'ye giriştir ve daha pek çok konu var. C++ öğrenmeden Qt, OpenGL, DiretX gibi konulara girmeyin yürümeyi öğrenmeden koşmak gibi olur 
Açılımı "Graphical User Interface" olan GUI, grafiksel kullanıcı arayüzü anlamına gelir. C ve C++ ile ilgilendiyseniz konsol ekranını bilirsiniz. C++'da bir uygulama yaptığımızda bu uygulama siyah bir konsol ekranından ibaret olacaktır. Uygulamamızda buton, checkbox, radiobutton gibi nesneler olmayacaktır. Bu simsiyah konsol ekranı kullanıcıların işini zorlaştıracak ve oluşturduğunuz programın görünüşünü kötü etkileyecektir. Grafiksel kullanıcı arayüzü ile siyah konsol ekranına komut girerek uygulamayı harekete geçirmeye gerek yok. GUI sayesinde, uygulama geliştirirken butonlar, etiketler (yani label), pencereler gibi bir çok şey kullanabiliriz. Sadece fare ve klavye ile kontrol edilebilen bir uygulama, konsol ekranına komutlar girilerek işleyen bir konsol uygulamasından çok daha iyidir.
C++'da GUI Uygulamalar Nasıl Geliştirilir?
C++ dilinde görsel arayüzlü uygulama geliştirmek için önce ne yapacağınıza karar vermelisiniz? Oyun ya da masaüstü uygulaması. Oyun geliştirmek için OpenGL ve ya DirectX (Bu arada OpenGL ve DirectX birbirlerinin en büyük rakipleridir) kütüphanelerini kullanabilirsiniz.Sadece bunlarla sınırlı değil diğer kütüphaneleri de kullanabilirsiniz (mesela Qt) ama oyun için en uygunu ve büyük firmalar tarafından da en çok kullanılanları bunlardır Özellikle de DirectX. Bu arada directx'i Microsoft'da kendi oyunlarında kullanmaktadır. DirectX destekli olan bazı oyunlar da şunlardır: Crysis2, Fear3, world of warcraft, Dirt3, vs. (araştırırsanız daha fazlasına ulaşabilirsiniz).
Eğer amacınız oyun yapmak değilse yani bir masaüstü uygulaması yapmak için Qt, GTK, MFC gibi kütüphaneleri kullanmak daha uygun olacaktır. Ben Qt'yi tercih ederim. Qt kütüphanesini kullanmak için Qt Creator ve ya Code::Blocks gibi IDE'leri kullanabilirsiniz. Bir de Monkey Studio diye bir IDE var onu da kullanabilirsiniz. Linux 'un Ubuntu dağıtımını kullanıyorsanız, "ubuntu software" den code::blocks ve monkey studio'yu indirebilirsiniz beş on saniyede kurulacaktır.
C++ konusunda en başarılı gördüğüm IDE'lerden biri Code::blocks'tur. Code::blocks'u OpenGL, GTK, DirectX gibi grafik kütüphaneleri için de kullanabilirsiniz. Bu konuda Qt Creator'u tavsiye ederim. Çok gelişmiş bir IDE yani tümleşik geliştirme ortamıdır.
Qt Creator
Qt Creator IDE sayesinde çok daha kolay ve hızlı şekilde grafik arayüzlü C++ uygulamaları oluşturulabilir. Qt Creator şüphesiz alanında en iyi IDE'lerden biridir. İki sürümü vardır:
1-Commercial (ticari)
2-Open Source (açık kaynak)
Bu iki sürümden ilki yani ticari olan sürüm paralıdır ve indirip 30 gün ücretsiz kullanabilirsiniz ama sonrasında satın almanız gerekir (fiyatı da az değil çok fazla). Bu iki versiyon arasındaki farklara göz atmak isterseniz ---> (https://info.qt.io/download-qt-for-application-development).
Biz ücretsiz olan open source (açık kaynak) versiyonu kullanacağız. İndirme linki aşağıda.
https://www.qt.io/download-open-sou...c207fd03|d62710cd-e1db-46aa-8d4d-2f1c1ffdacea
Ubuntu kullanıyorsanız Terminal'i (uç birim) açın ve aşağıdakileri yazın.
wget http://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-linux-x64-5.7.0.run
chmod +x qt-opensource-linux-x64-5.7.0.run
./qt-opensource-linux-x64-5.7.0.run
Şimdi olması lazım olmuyorsa sisteminizi güncelleyip tekrar deneyin. Ya da manuel şekilde indirip kurun. Qt Creator'u kurduysanız çalıştırın. Resimdeki gibi bir ekran gelecek. New Project seçeneğine tıklayın ve yeni bir proje oluşturun.
New Project'e tıklayınca ekrana bir pencere gelecek. Choose'ye tıklayın
Sonra uygulamanızın adını yazın ve next'e tıklayın.
Sonra next, next... finish seçeneklerine tıklayın ve karşınızda kodların yazılı olduğu bir pencere gelecek.
Yukarıdaki resimde görüldüğü gibi ekranın sol tarafında bazı dosyalar var. Bunlardan Forms klasörüne iki kere tıklayın. Forms'un içinde mainwindow.ui adlı dosyaya çift tıklayın.
Yukarıdaki gibi bir ekran çıkacak. Sağ tarafta istediğiniz nesneyi sürükleyip formun üzerine bırakabilirsiniz. Mesela ilk uygulamayı yapalım. "Push Button" nesnesini sürükleyip formunuza bırakın (nesnelere çift tıklayarak adını değiştirebilirsiniz).
Şimdi butona tıklayınca yazı yazdıran bir program yapalım. Öncelikle sağ taraftaki "mainwindow.ui" seçeneğine çift tıklayarak formun designe (tasarım) kısmını açın ve forma bir label, bir tane de Push Button nesnesi ekleyin. Form ilk açıldığında label'da yazı yazmaması gerekiyor çünkü butona tıklayarak yazıyı biz yazdıracağız. Form ilk açıldığında formda yazı olmayacak. Bunun için label'a çift tıklayıp üzerindeki TextLabel yazısını silelim. Sonra Push Butona sağ tıklayıp Go to slot seçeneğini tıklayalım ekrana küçük bir pencere gelecek. Burada butonun click event'ları yani butona tıklama olayları yazıyor.
https://i.hizliresim.com/dGobYp.png
Burada "clicked()" seçeneği butona tıklama olayıdır. Diğer önemli bazı şeyleride açıklayayım. Mesela pressed() seçeneği press, sıkıştırma demektir butona bastığınız an gerçekleşir. Altındaki released() seçeneği butonu bırakma olayıdır. Yani butona basılı tutup bıraktıktan sonra gerçekleşecek olaydır. Önemli olan tıklama olaylarını açıkladık. Şimdilik bu kadarı yeterli. Şimdi şöyle bir uygulama yapalım. Butona basılı tutunca ekrana c++ yazdırsın ve butonu bıraktığımız an yazı kaybolsun. Bunu yapmak için önce butona sağ tıklayıp Go to slot diyelim ve pressed() seçeneğini işaretleyerek next'e tıklayalım. Karşımıza kodlar çıkacak. Şu kodları yazalım (birinci, ikinci ve son satırdaki süslü parantezli olanlar otomatik olarak yazılacak zaten)
Aşağıda **** yazan yer m a i n olacak (boşluksuz)
**** MainWindow:
{
ui->label->setText("C++");
}
Siz sadece şu kodu süslü parantezlerin arasına yazın: ui->label->setText("c++");
Bu kod ile label'a tırnak işaretinin içinde olan C++ yazısı yazdırılır
Şimdi sol taraftaki mainwindow.ui dosyasına çift tıklayarak formun designe (tasarım) kısmını açalım ve butona tekrar sağ tıklayıp Go to slot'a basalım. Bu sefer çıkan pencereden released() seçeneğini seçelim ve süslü parantezlerin içine şu kodu yazalım:
ui->label->setText(" ");
Bu kod, butonu bırakınca label'ın text özelliğini tırnak işaretindeki değer ile değiştirir. Tırnak içinde hiçbir yazı olmadığından butona basmayı bırakınca c++ yazısı kaybolacak. Şimdi işimiz bitti artık projeyi derleyebiliriz. Pencerenin sol altındaki yeşil üçgene basarak çalıştırın. Ve ya uygulamayı çalıştırmak için üstteki "Build" seçeneğine basıp "Run" kısmına tıklayabilirsiniz. Ubuntu kullanıyorsanız ve "cannot find -lGL" gibisinden bir hata aldıysanız Terminali açıp aşağıdakini yazıp enter'a basın ve işlem bitince tekrardan çalıştırın:
sudo apt-get install libgl1-mesa-dev
Uygulama açılınca bir pencere çıkacak ve üstündeki butona tıklayınca ekrana "C++" yazısı gelecek ve butona basmayı bırakınca yazı geri gidecek.
Butona basılı tutulduğunda:
Butonu bıraktıktan sonra:
Bu şekilde istediğiniz yazıyı yazdırın mantık aynı
