Birisi bir GUI'nin nasıl çalıştığını ve ne zaman kullanmaya başlayacağımı açıklayabilir mi? [kapalı]


16

Yaklaşık bir aydır C ++ öğreniyorum ve daha ileri gitmeden önce, devam etmekte olduğum bu sıkıcı soruyu silmek istiyorum. Bir GUI'nin ne olduğunu biliyorum, ama nasıl çalıştığını ve belki de popüler olanların örneklerini gerçekten bilmiyorum?

Komut satırı programlamanın çıplak temeller olduğunu bilmeme rağmen, bir GUI ile uğraşmanın eğlenceli olacağını düşünüyorum.

Yaklaşık 3 milyon başka sorum olsa da bunları kaydedeceğim: D


1
son satır beni
güldürdü

Yanıtlar:


28

Birkaç GUI kütüphanesi üzerinde genelleme yapıyorum, ancak çok yüksek seviyede anlamanız gereken en önemli kavram bir GUI'nin olay güdümlü olması .

Bir konsol uygulamasında kullanıcı girişiniz genellikle tanımladığınız belirli noktalarda gerçekleşir. Sizden kullanıcıyı uyarırsınız, girdisini beklersiniz, bu girdiye göre bir şey hesaplarsınız. Temel farklılıklardan biri, girişin yalnızca tek bir yerde gerçekleşmesidir, komut satırından ( stdinC ++ 'da) metin okuyorsunuz .

Bir GUI uygulamasında, genellikle farklı eylemler veya metin alanları gerçekleştiren düğmeler gibi girdinin olabileceği birden çok yeriniz vardır . Olaylar burada devreye giriyor. Örneğin, bir düğmeyi tıklatmak bir etkinliği tetikler. Bu olayın , genellikle böyle bir çift tetiklendiğinde çağrılan bir olay nesnesini alan bir yöntem olan bir olay işleyicisi tarafından ele alınması gerekir . Düğmeniz olay işleyiciyi nasıl biliyor? Genellikle abone olursunuz (veya dinlersiniz ).

İşte bir "C ++ ilham" örneği, bu gerçek QT veya C ++ kodu değil.

class MyClickHandler : public ClickListener{
   void clickHandler(ClickEvent e){
      showAlertBox("The button "+e.getSource().getName()+" has been clicked"); 
   }
};

Düğmeyi oluşturduğunuzda, düğmeye karşı MyClickHandler sınıfının bir örneğini kaydedersiniz.

...
MyClickHandler handler();
Button b("Save");
b.registerListener(handler);
...

Şimdi Button bdüğmesine her tıklandığında "Save (Kaydet) düğmesine tıklandı" yazan bir mesaj kutusu görünür.

Bir GUI uygulamasının iki aşaması olduğunu hayal edebilirsiniz:

  • GUI'yi oluşturun: Başlangıçta tüm nesnelerin oluşturulduğu ve birbirine bağlandığı kısa bir süre.
  • Olay döngü : Sizin GUI Bir Big ise döngü ve sadece bir olay tetiklenir kadar rölantide orada oturuyor.

Bu çok basit bir örnek, ancak hangi çerçevede seçerseniz seçin, bir düğme tıklandığında bir mesaj kutusu göstermeyi deneyin.

Çerçeve için, orada bir sürü var: C ++ durumunda muhtemelen Qt tavsiye ederim.

Son bir tavsiye sözcüğü: Arka planda neler olduğunu gerçekten öğrenene kadar GUI tasarımcılarından uzak durun. Bazı basit örnekler yazmak ve önce olay döngüsünü anlamak ve sonra daha karmaşık düzenlere geçmek o kadar da zor değildir.


Sınıf tanımının sonuna noktalı virgül ekleyip mirasınızı herkese açık hale getirirseniz, uygun / olası C ++ sözdizimi olur.
Lstor

1
Bitti. Ama sonuçta kod çalıştırılamayacağı için yanlış beklentiler ortaya çıkarmak istemedim. Deneyimlerimin çoğu, muhtemelen sınıf isimlerine yansıyan Swing'te. Aynı kavramlar farklı çerçevelerde farklı şekilde adlandırılacaktır.
sebastiangeiger

1
+1 Bu soruya cevap veren tek cevap gibi görünüyor (bana göre sadece çerçeveler hakkında değil, genel kavramları soruyor gibi görünüyor)
Federico klez Culloca

1
Ewwww .... çirkin dinleyici bok.
DeadMG

7

GUI programlamasını öğrenmek için her zamanki gibi iyi bir zaman. C ++ bildiğiniz gibi, QT'ye bakmanızı tavsiye ederim. Harika belgeler, devasa kullanıcı tabanı ve birçok örnek / öğretici de öğrenilebilir.


1
Qt - @David - +1 için Qt, Qt Creator adlı kendi geliştirme ortamına sahiptir. Qt güçlü, sezgisel, kapsamlı, çok iyi belgelenmiş ve geniş ve aktif kullanıcı tabanlıdır. Başlamak kolaydır ve oynamaya başlamak ve kendi işinizi yapmak için birçok örnek vardır - bu arada öğrenmenin harika bir yoludur. Bu indirilebilir burada
Roger Attrill

Bunu küçümsemeye meyilliyim. QT, neye dikkat edeceğinizi bilmiyorsanız C ++ 'da çok kötü uygulamaları teşvik eder. - Sadece bir ay C ++ 'dan sonra değil. Ayrıca, C ++ 'daki bazı karmaşık yönlere değinir. Mümkünse, önce GUI programlamayı farklı bir dilde başlatacağım ve C ++ 'ı doğru almaya konsantre olacağım.
Konrad Rudolph

3

Microsoft Visual Studio C ++ Express ile de başlayabilirsiniz . IDE çok kolay ve kullanımı kolay (ve ücretsiz!) Ve ilk GUI uygulamalarınızı çok hızlı bir şekilde oluşturabileceksiniz ... Bu, olay odaklı programlamanın temellerini, farklı bir yaklaşımı anlamaya konsantre olmanıza yardımcı olacaktır. ustalaşmanız gerekecek.

Ayrıca doğrudan WPF odaklı uygulamalar oluşturmaya başlayabilirsiniz, ancak ilk başta Windows Forms ile başlayacağım, bu Microsoft'un Windows Forms API'sı ile sadece temel C ++ olduğu için kavranması gereken bir teknolojidir.


1
VC ++ Express ile GUI yazabilirsiniz: 1. Çok eski, hantal ve sadece saçma Win32 API 2. bok eski kazık olan MFC 3. Daha iyi ama çapraz platform değil WTL. 4. Popüler olmayan, kötü bir şekilde desteklenen (hatta hiçbir fikri olmayan) ve çok karmaşık olan C ++ / CLI. Qt daha kolay, platformlar arası, güzel bir GUI tasarımcısına ve küçük standart kütüphanesi ile C ++ 'da çok önemli olan GUI olmayan çok sayıda sınıfa sahiptir.
Anton Barkovsky

0

Belki c ++ etiketli StackOverflow için daha uygundur; ama yine de.

Google'da bunlardan birkaçına bakın; Qt, WxWidgets, TheForgers'ın WinApi, Fltk ...

GUI'lerin kullanımı zor değildir, özellikle de c ++ 'ı zaten bildiğinizde. WxWidgets ile gitmek I hesap; Qt bir aylık öğrenim için biraz fazla karmaşık. Wx'i birkaç saat içinde alabilirsiniz.


-1

Kullanıcılar karmaşık şeyleri sevmezler. Konsol karmaşık bir şeydir, bu yüzden daha kolay ve anlaşılması kolay GUI uygulamaları oluşturmanız gerekir. Bu benim en belirgin nedenim. Gtk veya Qt'ye bakabilirsiniz - bu ikisi en popüler olanlardır.


2
CLI karmaşık değildir ve tanımı gereği GUI'ler kullanıcı için DAHA karmaşıktır. Daha az karmaşık değil, daha erişilebilirler.
Ominus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.