C ++ ile nasıl grafiksel kullanıcı arabirimi oluşturabilirim? [kapalı]


270

Tüm C ++ programlarım şu ana kadar komut satırı arayüzünü kullanıyor ve deneyime sahip olduğum tek dil GUI'leri desteklemeyen PHP.

Nerede C ++ grafik kullanıcı arabirimi programlama ile başlayabilirim? Nasıl oluşturabilirim?


4
Değişir. Ne tür bir işletim sistemini hedefliyorsunuz? Birçok GUI çerçevesi işletim sistemine özgüdür.
Michael Ratanapintha

3
Hangi işletim sistemi / platform? Veya, platformlar arası GUI uygulamaları yazmakla ilgileniyorsanız, lütfen şunu söyleyin - bunlar C ++ için büyük bir fark
yaratır

3
PHP, GUI programlarının yazılmasını destekler. PHP programlarını komut satırından çalıştıramazsınız ve PHP-GTK gtk.php.net ve PHP-Qt php-qt.org gibi yardımcı olabilecek gui kütüphaneleri de neden ihtiyacınız olduğunu değerlendirmek isteyebilirsiniz c ++. C ++ 'da GUI yazmak, diğer birçok dilden daha zordur ve c ++ kodunuzu Python veya C # veya PHP'den çağrılan kütüphanelere veya GUI'leri kodlamak için biraz daha kolay bir şeye yerleştirebilirsiniz.
kibibu

6
Sorunuz o kadar geniştir ki, sadece araç setlerinin adlarını veya hatta bazı eğiticileri istemediğinizi düşünüyorum. Size API'lar veya örneklerden daha fazlasını veren, aslında kavramlar veren bazı kitaplar istiyorsunuz. KTC aşağıda bazılarını önerir, ancak oynamaya başlamak için hangi araç takımını seçerseniz seçin, okuyabileceğiniz birini bulduğunuzdan emin olun.
kuark

6
"C ++ 'da GUI yazmak birçok dilde olduğundan daha zordur" Bu iddiayı neye dayandırıyorsunuz?
piotr

Yanıtlar:


163

Esasen, bir işletim sisteminin pencereleme sistemi, pencere oluşturmak veya pencereye bir düğme koymak gibi işleri yapmak için yapabileceğiniz bazı API çağrılarını ortaya koyar. Temel olarak, bir başlık dosyaları paketi alırsınız ve stdlib ve ile yaptığınız gibi bu içe aktarılan kitaplıklardaki işlevleri çağırabilirsiniz printf.

Her işletim sistemi kendi GUI araç seti, başlık dosyaları paketi ve API çağrıları ve kendi işlerini yapma yöntemiyle birlikte gelir. Her yerde çalışan programlar oluşturmanıza yardımcı olan GTK , Qt ve wxWidgets gibi platformlar arası araç kitleri de vardır . Bunu her platformda aynı API çağrılarına sahip olarak, ancak yerel OS API çağrılarını çağıran API işlevleri için farklı bir uygulama yaparak başarırlar.

CLI programından farklı olacak olan hepsinin ortak bir yanı, olay döngüsü olarak adlandırılan bir şeydir. Temel fikir biraz karmaşık ve sıkıştırılması zor, ancak özünde, ana sınıfınızda / ana işlevinizde çok fazla cehennem olmadığı anlamına gelir:

  • yeni bir olay olup olmadığını görmek için olay sırasını kontrol edin
  • varsa, bu olayları uygun işleyicilere gönderin
  • işiniz bittiğinde, işletim sistemine geri kontrol edin (genellikle bir çeşit özel "uyku" veya "seçme" veya "verim" işlev çağrısı ile)
  • işletim sistemi tamamlandığında verim işlevi geri döner ve döngünün etrafında başka bir gezinme olur.

Olaya dayalı programlama hakkında birçok kaynak vardır. JavaScript ile ilgili herhangi bir deneyiminiz varsa, aynı temel fikirdir, ancak siz, komut dosyasının olay döngüsünün kendisi veya hangi olaylar olduğunu kontrol edemezsiniz, tek işiniz işleyicileri yazmak ve kaydetmek.

GUI programlamanın genel olarak inanılmaz derecede karmaşık ve zor olduğunu unutmamalısınız. Seçeneğiniz varsa, gömülü bir web sunucusunu programınıza entegre etmek ve HTML / web tabanlı bir arayüze sahip olmak aslında çok daha kolaydır. Karşılaştığım tek istisna, Apple'ın Cocoa + Xcode + arayüz oluşturucu + öğreticileri, gördüğüm GUI programında yeni olan insanlar için kolayca en ulaşılabilir ortam olmasını sağlıyor.


" Gömülü bir web sunucusunu programınıza entegre etmek ve html / web tabanlı bir arayüze sahip olmak aslında çok daha kolay. " Süslü şeyler yapmak istiyorsanız (karmaşık kullanıcı arayüzü, özel kontroller, animasyonlar vb.), Evet. Sadece tipik bir GUI (normal kontroller ve yerel bir his ile) istiyorsanız, hayır.
Acorn

167

Her biri kendi güçlü ve zayıf yönlerine sahip birçok ücretsiz taşınabilir GUI kütüphanesi vardır :

Özellikle Qt, başlamanıza yardımcı olacak güzel öğreticiler ve araçlara sahiptir. Zevk almak!

Ancak, Win32 API veya MFC gibi platforma özgü işlevlerden kaçınmanız gerektiğini unutmayın . Bu, sizi neredeyse hiçbir faydası olmayan belirli bir platformda gereksiz yere bağlar.


25
Şahsen, Win32 API için programlama güzel olduğunu düşünüyorum. Qt kullanmaktan çok daha fazla hoşlanıyorum ve kendi başına bir fayda var. Belki de bu sadece benim.
mrduclaw

6
Kişisel deneyimim tam tersi. Win32 API benim için diğer tüm API'lardan daha fazla güçlük yarattı.
vog

17
@mrduclaw, "Bence Win32 API için programlama güzel". Taşınabilir kod yazmak için ne pahasına olursa olsun TL. (istisnalar olduğu için "dene" kelimesini kullandığımı lütfen unutmayın ...) Taşınabilir olmayan kod yazmak nasıl "güzel" kabul edilir?
Trevor Boyd Smith

11
@Trevor Boyd Smith: Farklı hedefler, sanırım. Profesyonelce yazdığım kodların neredeyse hiçbiri çapraz platform olamazdı, bu yüzden bu benim için hiç endişe kaynağı değildi.
mrduclaw

1
milyon dolarlık soru, oyun eğitmenleri yapan erkeklerin sadece küçük exe tedarik etmeleri ve programlarının güzel UI'ları var, bu yüzden bu 3. parti libariesini tedarik etmedikleri UI'yi nasıl oluşturduklarını merak ediyorum?
user889030

74

İşletim sisteminden bağımsız algoritma " Üç adımda C ++ 'da GUI uygulamaları oluşturma ":

  1. Qt Creator'ı yükleyin

    resim açıklamasını buraya girin

  2. Yeni proje oluştur (Qt Widgets Uygulaması)

    resim açıklamasını buraya girin

  3. İnşa et.

Tebrikler, C ++ 'da ilk GUI'niz var.

Artık "Merhaba dünya" GUI uygulamasından daha karmaşık bir şey oluşturmak için birçok belgeyi okumaya hazırsınız .


Geçmişte, diğer GUI'lerin yeterince başlangıç ​​dostu olmamaları konusunda sorun yaşadım. Ancak, Qt'nin bazı harika öğreticileri var. Tavsiye için teşekkürler!
JD

23

"Örnek olarak Windows XP diyelim" yorumu düşünüldüğünde seçenekleriniz şunlardır:

  • Microsoft Windows için sürpriz olan Windows API'yı arayan API'si aracılığıyla işletim sistemi ile doğrudan etkileşim kurun . WinAPI için kesin başvuru Microsoft'un MSDN web sitesidir . Bunun için popüler bir çevrimiçi başlangıç ​​dersi, Forger'ın Win32 API Programlama Eğitimi'dir . Bunun için klasik kitap Charles Petzold'un Programlama Pencereleri, 5. Baskı .

  • WinAPI'yi C ++ sınıfına saran MFC gibi platforma (hem işletim sistemi hem de derleyici açısından) özgü bir kitaplık kullanın . Bunun için referans yine MSDN'dir. Bunun için klasik bir kitap Jeff Prosise'nin MFC'li Programlama Pencereleri, 2. Baskı . Eğer CodeGear C ++ Builder kullanıyorsanız, buradaki seçenek VCL'dir .

  • GTK + (C ++ sarmalayıcı: gtkmm ), Qt , wxWidgets veya FLTK gibi bir çapraz platform kitaplığı kullanınbelirli bir işletim sisteminin API'sini saran Bunların avantajları, genel olarak, programınızın kaynak kodlarını değiştirmek zorunda kalmadan farklı işletim sistemleri için derlenebilmesidir. Daha önce de belirtildiği gibi, her birinin kendi güçlü ve zayıf yanları vardır. Hangisini kullanacağınızı seçerken göz önünde bulundurulması gereken bir nokta da lisanstır. Verilen örnekler için GTK + & gtkmm LGPL altında lisans, Qt tescilli seçenek dahil olmak üzere çeşitli lisanslar altındadır, wxWidgets kendi wxWindows Lisansı altındadır (wxWidgets Lisansı ile yeniden adlandırma) ve FLTK istisna dışında LGPL altındadır. Referans, öğretici ve / veya kitaplar için, ayrıntılar için her birinin web sitesine bakın.


9
MFC kötülüktür. Başka seçeneğim yoksa WIN API'yi kullanmayı tercih ederim.
the_drow


18

Zaten şu anda bulunduğun yerdeyim, sanırım sana "cevap verebilirim".

Gerçek şu ki bir GUI yapmanın kolay bir yolu yok. GUI'ler platforma ve işletim sistemine özel koda oldukça bağımlıdır, bu nedenle pencere yönetimi API'larındaki hedef platform / OS belgelerinizi okumaya başlamalısınız. İyi olan şudur: Bu sınırlamaları ve soyut mimari farklılıklarını tek bir çoklu platform API'sında ele alan çok sayıda kütüphane vardır. Daha önce önerilenler, GTK ve Qt, bu kütüphanelerden bazılarıdır.

Ama bunlar bile biraz vardır çok yeni kavramlar, veri türleri, ad ve sınıfların çok tanıtılmaktadır beri karmaşık, bir kerede tüm. Bu nedenle, bazı GUI WYSIWYG editörü ile birlikte gelirler. GUI'lerle programlama yazılımını neredeyse mümkün kılar.

Özetlemek gerekirse, Microsoft Visual Studio gibi GUI geliştirme için ücretsiz olmayan "ortamlar" da vardır. Delphi deneyimi geçmişleri olanlar için Visual Studio daha tanıdık olabilir. GUI geliştirmeye başlamak için fazlasıyla yeterli olan Microsoft: Visual Studio Express tarafından sağlanan tam Visual Studio ortamına ücretsiz alternatifler de vardır .


15

"Basit" eğiticili bir web sitesi buldum: http://www.winprog.org/tutorial/start.html


8
Bu, GUI programlamaya Windows platformuna bağlayan çok düşük seviyeli bir yaklaşım olan Win32 API'yi tanıtır. Ben bunu tavsiye etmem.
vog

17
Geçerli bir seçenek. Başlamak için en iyi yer olmayabileceğine katılıyorum, ancak aşağı oyu hak etmiyor.
Emil H

1
Bunun ideal bir çözüm olmadığını biliyorum, ancak Windows'daki gui sisteminin nasıl çalıştığını öğrenmeye yardımcı oluyor. Bu dersi birkaç yıl önce okudum ve şimdi mesaj döngüsünün ne olduğunu ve nasıl çalıştığını biliyorum. .Net dosyasındaki winformlarla çalışırken bu bilgi kullanışlı olabilir.
ZippyV

7
Masaüstü uygulamaları yazacaksanız, işletim sisteminin kullanıcıyla gerçekten nasıl işlediğini ve etkileşimde bulunduğunu bilmenin yerini tutamazsınız. Bir kütüphaneyi sadece temelleri anlamadan kullanırsanız, neler olduğunu asla anlayamazsınız. Biraz düşük seviye win32 gui programlama öğrenmek iyi harcanan zaman olacaktır.
Jim In Texas

@Jim Texas: Katılıyorum, ama bu "düşük seviye biraz" temel sonra öğrenilmelidir, bu yüzden hala bu öneri yeni başlayanlar için uygun bulmuyorum.
vog

3

C ++ ile bir .NET Windows GUI oluşturmak kolaydır.

MSDN'den aşağıdaki eğiticiye bakın . İhtiyacınız olan her şeyi (Visual C ++ Express) ücretsiz olarak indirebilirsiniz .

Tabii ki kendinizi .NET'e bağlarsınız, ancak sadece oynuyorsanız veya sadece bir Windows uygulamasına ihtiyacınız varsa iyi olacaksınız (çoğu insanın hala Windows'u var ... şimdilik).


3

FLTK kullanıyorum çünkü Qt ücretsiz değil. Ben wxWidgets seçmiyorum , çünkü basit bir Merhaba, Dünya ile ilk testim ! programı 24 MB, FLTK 0.8 MB yürütülebilir bir üretti ...


4
QT lisansı değişiklikleri nedeniyle,
QT'ye geçmeyi

2
Kendi wxWidgets programım 5,9 Mb, hatta tüm bağlantılı kütüphanelerde bile
msangel
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.