GUI Kütüphanesi Tavsiyesi Gerekiyor

Başlatan Tagli, 11 Şubat 2011, 05:30:57

Tagli

Sonunda C++ öğrenmeye başladım. Daha önceden C ve Java bildiğim için birkaç gün içinde işi kavrayacağımı umuyorum. Ancak hangi GUI kütüphanesini kullanacağım konusunda bir fikrim yok. Bu konuda deneyimlerinize ve tavsiyelerinize ihtiyacım var. wxWidgets, GTK+ ve Qt arasında bir seçim yapabilmek istiyorum.
Gökçe Tağlıoğlu

eseneren

Tagli, C kullanıyorum bende C++ ve C# arasında kaldım.
C++ mcu ya daha yakın C# bilgisayara yakın gibi geliyor.Az cok C# ogrendım ama c++ hala aklımda yanlıs mı yaptım.
Senin secim değerlerin nelerdi.?
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

Sepiroth

kesinlikle C++&Qt derim, platform derdiniz olmaz:)
Either you feel it, or not...

vsalma

#3
MFC geçmişiniz varsa vxWidgets yoksa  Qt kullanın. İkisi de güzel aslında. Ama sanki Qt daha olgun gibi. Qt için eskiden ticari yazılım dağıtımında lisans ücreti ödemeniz gerekiyordu sonradan lisansı değişti ücretsiz kullanılabiliyor. Vaktiniz varsa ikisini de deneyip sevdiğinizi seçin derim. Zor bir seçim. İkisi de güzel.. Eğer ileride embedded cihazlar için de kullanacağım derseniz qt yi derlemek veya değişik cihazlar için desteğini bulmak daha kolay olur.

http://wiki.wxwidgets.org/WxWidgets_Compared_To_Other_Toolkits

Tagli

Evet, internette de baya araştırdım, yer yer hararetli tartışmaları da okudum. Şu anda Qt ağır basıyor gibi. Embeded Linux için uygun olması ve yanlış anlamadıysam bir şekilde OpenGL ile de bağlantılı olması belirgin artıları. Ayrıca benim MFC geçmişim yok, ve Java bilgim sebebiyle OOP'e alışığım ki bu üç tercih arasında Qt OOP mantığına en yakın olanı.

Dökümantasyon da çok önemli. Anladığım kadarıyla özellikle wxWidgets bu konuda zayıf kalıyor. Hakkında yazılmış kitaplar sayıca az ve tarih olarak eski. En iyi desteği ise Qt sunuyor.

Lisans konusunda Qt'nin ufak bir sınırlaması var. Ticari amaçlı kullanılacaksa, ürününüzü GPL lisansıyla çıkarmak zorundasınız. Kapalı olmasını istiyorsanız lisans ücreti ödemek gerekiyor. Hem ticari ürün çıkarmayı düşünmediğimden hem de zaten açık kaynak taraftarı olduğumdan bu konuda bir sıkıntım yok.

Benim aradığım en önemli özellik, Java'da veya C#'ta (.net mi desem yoksa?) olduğu gibi OOP mantığıyla çalışması (veya yakın olması) ve kolay öğrenilebilmesi. Ve de Windows'a bağımlı olmaması. Öyle sanıyorum ki Qt bu konularda diğer seçeneklerden daha iyi.

eseneren, zamanında, sanal makinesi sebebiyle her yere uyumlu olduğunu duyduğumdan Java öğrenmek istemiştim. Zaten okulda aldığım eğitim de Java ve C üzerineydi (bu eğitim dil ile sınırlı değildi tabi). Seri porta ulaşmanın kolay olması sebebiyle kısa bir dönem C# kullandım, zaten Java bilince 3-5 günde C# da öğreniliyor (muhtemelen tersi de geçerlidir). Eğer Windows ile mutluysan, C#'ın tüm ihtiyaçlarını karşılayacağını düşünüyorum. Geriye baktığım zaman görüyorum ki nesne tabanlı programlamaya Java gibi yüksek seviye bir dil yerine C++ gibi düşük seviye bir dil ile başlamış olsaydım bu işten soğurdum. Bu açıdan bakıldığında C++ yerine C# ile başlaman iyi olmuş. C#'a ve OOP mantığına hakim olduktan sonra, gerekirse çok kısa bir süre içinde C++ da öğrenebilirsin. Ayrıca C++ ile işe başlasaydın, sen de muhtemelen şimdi benim yaptığım gibi GUI kütüphanesi arayışına girip daha ilk günlerden kafanı karıştıracaktın :)

Dipnot: Programlamaya Fortran ile başladım, çünkü okulda 1. sınıfta ders olarak o veriliyordu :)
Gökçe Tağlıoğlu

Tagli

Baya zaman geçti... İlk mesajımda C++ öğrenmeye başladığımı yazmıştım ama o sıralar C++ kullanmamı gerektirecek bir durum olmadığı için öğrenme işi havada kaldı.

Bugünlerde C++'ı kullanarak aktif olarak öğreniyorum. Grafik kütüphanesi olarak ilk denemeleri wxWidgets ile yapmaya başladım ve konu hakkında birkaç yorum yapabileceğimi düşünerek bu başlığı hortlattım.

Doğruda olaya gireyim: wxWidgets'ın dokümantasyonu berbat. Herşey dağınık, yani tek bir kaynağa bakarak olayı anlamak mümkün değil. Resmi dokümantasyonda bahsettiği bazı şeyleri, kendi içinde bile bulmak mümkün olmuyor. Tam "yok galiba böyle birşey" diyecekken Google'a yazıp başka bir sitede bulabiliyorsunuz.

Event handling olayını da tam oturtamadım kafamda. Belki henüz işin acemisi olduğum içindir ama bence ortada bir ikilik, hatta belki de üçlük sorunu var: İnternetteki eğitimlerin çoğu statik tablo oluşturma yöntemi ile başlamış. Makrolara dayanan bu yöntem çok hoşuma gitmedi, aslında anlamaya da çalışmadım. Event'lerin handler'lara dinamik olarak bağlanması yöntemi - ki connect() diye bir fonksiyonla oluyor - bazı eğitimlerde bahsedilmiş ama yeterince net anlatan bir yer yok gibi, veya ben anlayamadım. İkinci yöntemi kullanmak istememe rağmen, yapmaya çalıştığım şeyle ilgili rehberler genelde makro yöntemine göre yazılmış oluyor. Sonra tutturana kadar dene & yanıl. Ama durun, daha bitmedi: 2.9 versiyonunda ise bind() diye yeni bir fonksiyon ile bu işler yapılacakmış. Ben şimdilik bunu tamamen kafamdan uzaklaştırmaya çalışıyorum.

Bir diğer rahatsız edici gözlem - önemsiz gibi gözükse tam da ihtiyacım olan şeye engel olduğu için sinir bozucu - wxSpicCtrl widget'ının sadece int ile çalışıyor olması. Benim uygulamamda ise double kullanımı gerekiyor. Bunu çözen harici bir kütüphane varmış ama uğraşmak istemediğim için galiba sorunu wxTextCtrl ile çözeceğim.

Projeye başladığım ve bir miktar ilerleme kaydettiğim için geri dönüşüm yok ama sanırım bu wxWidgets'i ilk ve son kullanışım olacak. Şöyle bir bakınca GTK'nın C++ için olan versiyonu gtkmm hoşuma gitti gibi. Gerçi kullanmadan emin olmak mümkün değil ama dokümantasyonu derli toplu gözüküyor.

wxWidgets'ı acımasızca kötüleyemem çünkü onunla yazılmış hoş programlar var. Bir örneği, devre tasarımında sıklıkla kullandığım KiCAD. Durum belki de benim acemiliğimden kaynaklanıyor ama ilk izlenimlerime dayanarak yapacağım yorum özetle şu ki "wxWidgets'tan uzak durun!"
Gökçe Tağlıoğlu

atioky_216

Ama xWidgets ile arayüz kısmı aynı Visual C++ kullanmışsanız o yapıya benziyor, Qt ye gelince herkes dökümantasyonu çok iyi dese de ben kod kısmını hiç mi hiç beğenmedim, fakat şimdilik giriş yapmasam da bir süre sonra arayüz-linux-Qt  giriş yapacağım, şimdilik C# a başlıyorum. Biraz inceledim dediğiniz gibi yılladır C ile uğraştım , denetleyicisinden PC sine hatta görüntü işlemede bile millet C++ kullanırken inat ettim C de fakat artık zamanı geldi.

Yanlız iyi şekilde C bilen için C# bence yogun calışma ile 1 haftada iyi- kötü çalışmaya başlanabileceğine ben de katılsam da C# ile başlayan insanın C de bir-iki haftada işi çözeceğine pek inanmıyorum, ben zamanında çok uğraşmıştım :D