Bagaimana cara membangun antarmuka pengguna grafis di C ++? [Tutup]

270

Semua program C ++ saya sejauh ini telah menggunakan antarmuka baris perintah dan satu-satunya bahasa lain yang saya miliki adalah PHP yang tidak mendukung GUI.

Di mana saya mulai dengan pemrograman antarmuka pengguna grafis di C ++? Bagaimana cara saya membuatnya?

waiwai933
sumber
4
Tergantung. Sistem operasi apa yang Anda targetkan? Banyak kerangka kerja GUI khusus untuk OS.
Michael Ratanapintha
3
OS / platform apa? Atau, jika Anda tertarik untuk menulis aplikasi GUI lintas-platform, katakan demikian - hal-hal ini membuat perbedaan besar untuk C ++ ...
Shog9
3
PHP TIDAK mendukung penulisan program GUI. Tidak ada alasan Anda tidak dapat menjalankan program PHP dari baris perintah, dan ada perpustakaan gui seperti PHP-GTK gtk.php.net dan PHP-Qt php-qt.org yang dapat membantu Anda juga mungkin ingin mengevaluasi mengapa Anda perlu c ++. Menulis GUI di c ++ lebih sulit daripada di banyak bahasa lain, dan Anda mungkin bisa menggabungkan kode c ++ menjadi pustaka yang dapat dipanggil dari Python atau C # atau PHP atau sesuatu yang sedikit lebih mudah untuk kode GUI.
kibibu
6
Pertanyaan Anda sangat luas sehingga saya pikir Anda tidak hanya ingin nama-nama toolkit atau bahkan hanya beberapa tutorial. Anda ingin beberapa buku , yang memberi Anda lebih dari API atau contoh, yang benar-benar memberi Anda konsep. KTC merekomendasikan beberapa di bawah ini, tetapi saya akan menyarankan, toolkit apa pun yang Anda pilih untuk mulai bermain, pastikan untuk menemukan yang dapat Anda baca juga.
quark
6
"Menulis GUI di c ++ lebih sulit daripada di banyak bahasa lain" Dalam apa Anda mendasarkan klaim ini?
piotr

Jawaban:

163

Pada dasarnya, sistem windowing sistem operasi memaparkan beberapa panggilan API yang dapat Anda lakukan untuk melakukan pekerjaan seperti membuat jendela, atau meletakkan tombol di jendela. Pada dasarnya, Anda mendapatkan seperangkat file header dan Anda dapat memanggil fungsi di pustaka yang diimpor, seperti yang Anda lakukan dengan stdlib danprintf .

Setiap sistem operasi dilengkapi dengan toolkit GUI sendiri, kumpulan file header, dan panggilan API, dan cara mereka sendiri dalam melakukan sesuatu. Ada juga toolkit lintas platform seperti GTK , Qt , dan wxWidgets yang membantu Anda membangun program yang bekerja di mana saja. Mereka mencapai ini dengan memiliki panggilan API yang sama pada setiap platform, tetapi implementasi yang berbeda untuk fungsi-fungsi API yang memanggil ke panggilan API OS asli.

Satu hal yang mereka semua miliki bersama, yang akan berbeda dari program CLI, adalah sesuatu yang disebut loop peristiwa. Ide dasarnya ada yang agak rumit, dan sulit untuk dikompres, tetapi pada dasarnya itu berarti tidak banyak yang terjadi di kelas utama / fungsi utama Anda, kecuali:

  • periksa antrian acara jika ada acara baru
  • jika ada, kirim acara tersebut ke penangan yang tepat
  • setelah selesai, kontrol kembali ke sistem operasi (biasanya dengan semacam panggilan fungsi "tidur" atau "pilih" atau "hasil")
  • maka fungsi hasil akan kembali ketika sistem operasi selesai, dan Anda memiliki lagi di sekitar loop.

Ada banyak sumber daya tentang pemrograman berbasis acara. Jika Anda memiliki pengalaman dengan JavaScript, itu adalah ide dasar yang sama, kecuali bahwa Anda, penulisnya tidak memiliki akses atau kontrol atas loop peristiwa itu sendiri, atau peristiwa apa yang ada, satu-satunya tugas Anda adalah menulis dan mendaftarkan penangan.

Anda harus ingat bahwa pemrograman GUI sangat rumit dan sulit, secara umum. Jika Anda memiliki opsi, sebenarnya jauh lebih mudah untuk hanya mengintegrasikan server web tertanam ke dalam program Anda dan memiliki antarmuka berbasis HTML / web. Satu-satunya pengecualian yang saya temui adalah tutorial Cocoa + Xcode + interface builder + tutorial yang menjadikannya lingkungan yang paling mudah didekati oleh orang-orang yang baru mengenal pemrograman GUI yang pernah saya lihat.

Breton
sumber
" Sebenarnya jauh lebih mudah untuk hanya mengintegrasikan server web tertanam ke dalam program Anda dan memiliki antarmuka berbasis html / web. " Itu tergantung. Jika Anda ingin melakukan hal-hal mewah (UI kompleks, kontrol kustom, animasi, dll.), Ya. Jika Anda hanya menginginkan GUI biasa (dengan kontrol biasa dan perasaan asli), tidak.
Acorn
167

Ada banyak perpustakaan GUI portabel gratis , masing-masing dengan kekuatan dan kelemahannya sendiri:

Terutama Qt memiliki tutorial yang bagus dan alat yang yang membantu Anda memulai. Nikmati!

Namun, perhatikan bahwa Anda harus menghindari fungsionalitas khusus platform seperti Win32 API atau MFC. Itu mengikat Anda tidak perlu pada platform tertentu dengan hampir tidak ada manfaatnya.

vog
sumber
25
Secara pribadi, saya pikir pemrograman ke Win32 API indah. Saya lebih menyukainya daripada menggunakan Qt, dan itu sendiri adalah manfaatnya. Mungkin itu hanya aku.
mrduclaw
6
Pengalaman pribadi saya justru sebaliknya. Win32 API menyebabkan lebih banyak kerumitan bagi saya daripada API lainnya.
vog
17
@ mrduclaw, "Saya pikir pemrograman ke Win32 API itu indah". Saya mencoba di semua biaya untuk menulis kode portabel. (harap dicatat saya menggunakan kata "coba" karena ada pengecualian ...) Bagaimana cara menulis kode non-portabel dianggap "cantik"?
Trevor Boyd Smith
11
@ Trevor Boyd Smith: Saya kira tujuan yang berbeda. Hampir tidak ada kode yang pernah saya tulis secara profesional yang bisa dibuat lintas platform sehingga tidak pernah menjadi perhatian saya.
mrduclaw
1
pertanyaan juta dolar adalah apakah orang-orang yang membuat pelatih permainan hanya memasok exe kecil dan program mereka memiliki UI yang indah jadi saya bertanya-tanya bagaimana mereka membangun UI mereka tidak menyediakan perpustakaan pihak ke-3 ini dengan itu?
user889030
74

Algoritma independen OS " Membuat aplikasi GUI dalam C ++ dalam tiga langkah ":

  1. Instal Qt Creator

    masukkan deskripsi gambar di sini

  2. Buat proyek baru (Aplikasi Qt Widgets)

    masukkan deskripsi gambar di sini

  3. Bangun itu.

Selamat, Anda punya GUI pertama di C ++.

Sekarang Anda siap membaca banyak dokumentasi untuk membuat sesuatu yang lebih rumit daripada aplikasi GUI "Hello world".

Kirill V. Lyadvinsky
sumber
Di masa lalu, saya mengalami masalah dengan GUI lain yang tidak cukup ramah pemula. Tapi, Qt memiliki beberapa tutorial yang bagus. Terima kasih atas rekomendasinya!
JD
23

Diberikan komentar "say Windows XP sebagai contoh", maka opsi Anda adalah:

  • Berinteraksi langsung dengan sistem operasi melalui API-nya, yang untuk Microsoft Windows adalah kejutan panggilan Windows API . Referensi definitif untuk WinAPI adalah situs web Microsoft MSDN . Tutorial pemula online yang populer untuk itu adalah Tutorial Pemrograman API Win32 dari Forger . Buku klasik untuk itu adalah Windows Pemrograman Charles Petzold , Edisi ke-5 .

  • Gunakan platform (baik dalam hal OS dan kompiler) perpustakaan khusus seperti MFC , yang membungkus WinAPI ke dalam kelas C ++. Referensi untuk itu adalah MSDN lagi. Buku klasik untuk itu adalah Pemrograman Jeff Prosise Windows dengan MFC, 2nd Edition . Jika Anda menggunakan say CodeGear C ++ Builder, maka opsi di sini adalah VCL .

  • Gunakan pustaka lintas platform seperti GTK + ( Pembungkus C ++: gtkmm ), Qt , wxWidgets , atau FLTKyang membungkus API OS tertentu. Keuntungan dengan ini adalah bahwa secara umum, program Anda dapat dikompilasi untuk OS yang berbeda tanpa harus mengubah kode sumber. Seperti yang telah disebutkan, mereka masing-masing memiliki kekuatan dan kelemahannya sendiri. Satu pertimbangan ketika memilih mana yang akan digunakan adalah lisensinya. Untuk contoh yang diberikan, GTK + & gtkmm adalah lisensi di bawah LGPL, Qt berada di bawah berbagai lisensi termasuk opsi kepemilikan, wxWidgets berada di bawah Lisensi wxWindows sendiri (dengan nama ganti menjadi Lisensi wxWidgets), dan FLTK berada di bawah LGPL dengan pengecualian. Untuk referensi, tutorial, dan atau buku, lihat situs web masing-masing untuk detailnya.

KTC
sumber
9
MFC itu jahat. Saya lebih suka menggunakan WIN API jika saya tidak punya pilihan lain.
the_drow
@the_drow Bagaimana dengan sourceforge.net/projects/win32-framework
Jerry Jeremiah
18

Karena saya sudah berada di tempat Anda sekarang, saya pikir saya bisa "menjawab" Anda.

Faktanya adalah tidak ada cara mudah untuk membuat GUI. GUI sangat tergantung pada platform dan kode spesifik OS, itu sebabnya Anda harus mulai membaca platform target / dokumentasi OS pada API manajemen jendela. Hal yang baik adalah: ada banyak perpustakaan yang membahas keterbatasan ini dan perbedaan arsitektur abstrak menjadi API multi-platform tunggal. Yang disarankan sebelumnya, GTK dan Qt, adalah beberapa perpustakaan ini.

Tetapi bahkan ini agak terlalu rumit, karena banyak konsep baru, tipe data, ruang nama dan kelas diperkenalkan, sekaligus. Untuk alasan ini, mereka digunakan untuk dibundel dengan beberapa editor GUI WYSIWYG. Mereka cukup banyak membuat perangkat lunak pemrograman dengan GUI mungkin.

Singkatnya, ada juga "lingkungan" bebas untuk pengembangan GUI seperti Visual Studio dari Microsoft. Bagi mereka yang memiliki latar belakang pengalaman Delphi , Visual Studio mungkin lebih akrab. Ada juga alternatif gratis untuk lingkungan Visual Studio lengkap yang disediakan oleh Microsoft: Visual Studio Express , yang lebih dari cukup untuk memulai pengembangan GUI.

Spidey
sumber
15

Saya menemukan situs web dengan tutorial "sederhana": http://www.winprog.org/tutorial/start.html

ZippyV
sumber
8
Ini memperkenalkan Win32 API, pendekatan tingkat sangat rendah untuk pemrograman GUI yang mengikat Anda ke platform Windows. Saya tidak akan merekomendasikan itu.
vog
17
Itu pilihan yang valid. Saya setuju bahwa ini mungkin bukan tempat terbaik untuk memulai, tetapi itu tidak pantas mendapatkan suara turun.
Emil H
1
Saya tahu ini bukan solusi ideal tetapi membantu mempelajari bagaimana sistem gui di Windows bekerja. Saya telah membaca tutorial ini beberapa tahun yang lalu dan sekarang saya tahu apa itu loop pesan dan bagaimana cara kerjanya. Saat bekerja dengan winforms di .net pengetahuan ini mungkin berguna.
ZippyV
7
Jika Anda akan menulis aplikasi desktop tidak ada pengganti untuk mengetahui bagaimana OS benar-benar membuat dan berinteraksi dengan pengguna. Jika Anda hanya menggunakan perpustakaan tanpa memahami dasar-dasarnya maka Anda tidak akan pernah benar-benar mengerti apa yang sedang terjadi. Belajar sedikit pemrograman win32 gui tingkat rendah akan menghabiskan waktu dengan baik.
Jim In Texas,
@ Jim Di Texas: Saya setuju, tetapi "sedikit level rendah" ini harus dipelajari setelah dasar-dasarnya, jadi saya masih menemukan rekomendasi yang tidak pantas untuk pemula.
vog
3

Sangat mudah untuk membuat .NET Windows GUI di C ++.

Lihat tutorial berikut dari MSDN . Anda dapat mengunduh semua yang Anda butuhkan (Visual C ++ Express) secara gratis .

Tentu saja Anda mengikat diri Anda dengan .NET, tetapi jika Anda hanya bermain-main atau hanya membutuhkan aplikasi Windows, Anda akan baik-baik saja (kebanyakan orang masih memiliki Windows ... untuk saat ini).

Justicle
sumber
3

Saya menggunakan FLTK karena Qt tidak gratis. Saya tidak memilih wxWidgets , karena tes pertama saya dengan Hello, World! program menghasilkan executable 24 MB, FLTK 0,8 MB ...

pernecker
sumber
4
Karena perubahan lisensi QT, saya berencana untuk beralih ke QT
pernecker
2
Program wxWidgets saya sendiri adalah 5,9 Mb, bahkan dengan semua perpustakaan yang terhubung di dalamnya
msangel