GUI Berkode Tangan versus GUI Desainer Qt [ditutup]

115

Saya menghabiskan liburan ini untuk belajar menulis aplikasi Qt. Saya baru saja membaca tentang Qt Designer beberapa jam yang lalu, yang membuat saya bertanya-tanya: apa yang digunakan orang-orang yang menulis aplikasi dunia nyata di Qt untuk mendesain GUI mereka? Sebenarnya, bagaimana orang mendesain GUI secara umum?

Saya, salah satunya, menemukan bahwa menulis kode dengan tangan secara konseptual lebih sederhana daripada menggunakan Qt Designer, meskipun untuk GUI Designer yang kompleks mungkin masuk akal. GUI yang besar mungkin dapat dilakukan menggunakan Designer, tetapi seiring waktu mereka mungkin menjadi sangat sulit untuk dikelola seiring dengan meningkatnya kompleksitas (ini hanya pendapat saya). Saya juga mengunduh kode sumber AmaroK untuk mengintip apa yang mereka lakukan, dan menemukan banyak panggilan ke addWidget () dan teman-teman, tetapi tidak ada file XML yang dibuat oleh Designer (selain: AmaroK harus menjadi aplikasi favorit saya) platform apa pun).

Lalu, apa cara yang "benar" untuk membuat GUI? Desainer atau kode? Mari kita, untuk pembahasan ini, pertimbangkan jenis GUI berikut:

  1. Dialog sederhana yang hanya perlu menerima masukan, menampilkan beberapa hasil, dan keluar. Mari kita asumsikan aplikasi yang mengambil URL YouTube dan mengunduh video ke hard disk pengguna. Jenis aplikasi yang kemungkinan besar akan digunakan oleh pemula.
  2. GUI tingkat menengah seperti, katakanlah, editor catatan tempel dengan beberapa item bilah alat / menu. Mari kita ambil contoh xPad ( http://getxpad.com/ ). Saya akan mengatakan sebagian besar aplikasi termasuk dalam kategori "utilitas".
  3. GUI yang sangat kompleks, seperti AmaroK atau OpenOffice. Anda tahu mereka ketika Anda melihatnya karena itu membuat mata Anda berdarah.
Ankur Sethi
sumber

Jawaban:

44

Pengalaman kami dengan Designer dimulai pada Qt3.

Qt3

Pada titik itu, Designer berguna terutama untuk menghasilkan kode yang kemudian akan Anda kompilasi ke dalam aplikasi Anda. Kami mulai menggunakan untuk tujuan itu, tetapi dengan semua kode yang dihasilkan, setelah Anda mengeditnya, Anda tidak dapat lagi kembali dan membuatnya kembali tanpa kehilangan hasil edit Anda. Kami akhirnya hanya mengambil kode yang dihasilkan dan melakukan semuanya dengan tangan untuk selanjutnya.

Qt4

Qt4 telah meningkat secara signifikan pada Designer. Tidak lagi hanya menghasilkan kode, tetapi Anda dapat secara dinamis memuat file Designer Anda (dalam xml) dan secara dinamis menghubungkannya ke objek yang sedang berjalan di program Anda - namun tidak ada kode yang dihasilkan, Anda harus memberi nama item di Designer dan tetap dengan nama untuk tidak merusak kode Anda.

Penilaian saya adalah bahwa ini sama sekali tidak berguna seperti Interface Builder di Mac OS X, tetapi pada titik ini, saya dapat melihat menggunakan file Designer secara langsung dalam sebuah program.

Kami belum pindah kembali ke Designer sejak Qt3, tetapi masih menggunakannya untuk membuat prototipe, dan men-debug tata letak.

Untuk masalah Anda:

  1. Anda mungkin bisa lolos dengan menggunakan dialog standar yang ditawarkan Qt. QInputDialog atau jika Anda membuat subkelas QDialog, pastikan untuk menggunakan QButtonDialogBox untuk memastikan tombol Anda memiliki tata letak platform yang tepat.

  2. Anda mungkin dapat melakukan sesuatu yang lebih terbatas seperti xPad dengan fungsionalitas Desainer terbatas.

  3. Saya tidak berpikir Anda bisa menulis sesuatu seperti OpenOffice hanya dengan Designer tapi mungkin bukan itu intinya.

Saya akan menggunakan Designer sebagai alat lain, seperti editor teks Anda. Setelah Anda menemukan batasannya, coba alat lain untuk masalah baru tersebut. Saya sangat setuju dengan Steve S bahwa satu keuntungan dari Designer adalah bahwa orang lain yang bukan pemrogram dapat melakukan tata letak.

Michael Bishop
sumber
23
Seharusnya tidak ada kebutuhan untuk mengubah kode yang dihasilkan oleh uic (pengompilasi file .ui). Jika lebih banyak fungsionalitas diperlukan, buat kelas baru yang mewarisi dari kelas yang dibuat atau menyertakannya sebagai anggota dan menambahkan kode yang diperlukan.
Parker Coates
1
Perlu dicatat bahwa di Qt3 dan awal Qt4 (sekitar 2008), Qt Designer kekurangan sejumlah fitur yang mungkin menjadi penghenti untuk beberapa, seperti kurangnya dukungan untuk ButtonGroups, slot khusus, penamaan QLayouts, dll. Tetapi untuk 5- yang terakhir 6 tahun atau lebih, semua masalah itu telah diatasi. Saya lebih suka menggunakan file UI jika saya bisa, jauh lebih mudah untuk mengatur ulang tata letak dan menghasilkan lebih sedikit kode untuk dipelihara.
Brendan Abel
42

Dalam pengalaman saya dengan Qt Designer dan toolkit / alat UI lainnya:

  • Alat UI mempercepat pekerjaan.
  • Alat UI memudahkan untuk mengubah tata letak nanti.
  • Alat UI mempermudah / memungkinkan bagi non-programmer untuk mengerjakan desain UI.

Kompleksitas sering kali dapat ditangani dalam alat UI dengan memecah desain menjadi beberapa file UI. Sertakan grup kecil komponen logis di setiap file dan perlakukan setiap grup sebagai satu widget yang digunakan untuk membangun UI lengkap. Konsep widget yang dipromosikan Qt Designer dapat membantu dalam hal ini.

Saya belum menemukan bahwa skala proyek membuat perbedaan. Pengalaman Anda mungkin berbeda.

File yang dibuat dengan alat UI (saya kira Anda dapat menulisnya dengan tangan jika Anda benar-benar menginginkannya) seringkali dapat dimuat secara dinamis pada saat run-time (Qt dan GTK + keduanya menyediakan fitur ini). Ini berarti Anda dapat membuat perubahan tata letak dan mengujinya tanpa kompilasi ulang.

Pada akhirnya, saya pikir baik kode mentah dan alat UI bisa efektif. Ini mungkin sangat tergantung pada lingkungan, toolkit / UI-tool, dan tentu saja preferensi pribadi. Saya suka alat UI karena mereka membuat saya siap dan bekerja dengan cepat dan memungkinkan perubahan mudah nanti.

Steve S
sumber
8

Organisasi tempat saya bekerja telah memindahkan aplikasi GUI-nya ke Qt beberapa tahun yang lalu. Menurut saya ada beberapa aspek yang perlu diperhatikan:

  • Bekerja dengan Qt Designer, setidaknya pada saat itu, bukanlah pilihan yang realistis: ada terlalu banyak fitur yang tidak dapat dilakukan dengan Qt Designer;
  • Konvensi dan struktur yang harus dipertahankan mencegah penggunaan Qt Designer;
  • Setelah Anda memulai tanpa Designer, mungkin sulit untuk kembali ke sana;
  • aspek yang paling penting, bagaimanapun, adalah bahwa programmer sangat terbiasa dengan pemrograman menggunakan vi atau emacs, daripada menggunakan GUI IDE.

Pengalaman saya sendiri, yang kembali kira-kira. 4 tahun, menggunakan Qt3.3, adalah bahwa perilaku dinamis dalam dialog tidak mungkin diwujudkan di Designer.

andreas buykx
sumber
8

Hanya untuk mengatakan saya telah menulis dan memelihara GUI yang kompleks di Qt tanpa menggunakan Qt Designer - bukan karena saya tidak suka Qt Designer, tetapi karena saya tidak pernah bekerja seperti itu.

Ini sebagian karena masalah gaya dan dari mana Anda berasal: ketika saya mulai menggunakan Qt, saya memiliki pengalaman buruk Dreamweaver dan Frontpage dan alat HTML visual lainnya, dan jauh lebih disukai menulis kode dengan HomeSite dan beralih ke Photoshop untuk tata letak yang rumit masalah.

Ada bahaya dengan IDE kode visual yang Anda coba pertahankan dalam alat visual, tetapi akhirnya harus mengubah kode juga - dengan cara yang tidak dipahami dengan baik.

Mempelajari pengembangan iPhone, misalnya, saya merasa frustasi untuk menekan benda visual 'ajaib' ('seret dari lingkaran kosong di inspektur Koneksi ke objek di jendela Pembuat Antarmuka ...') yang akan lebih sederhana (untuk saya) untuk memahami dalam kode lama biasa.

Semoga berhasil dengan Qt - ini adalah toolkit yang hebat, bagaimanapun Anda menggunakannya, dan Qt Creator sepertinya adalah IDE yang hebat.

Sam Dutton
sumber
7

Saya akan menambahkan bahwa salah satu alasan menggunakan desainer grafis adalah kurangnya manajer tata letak di Win32, misalnya. Hanya pemosisian absolut yang mungkin, dan melakukan itu dengan tangan akan menyebalkan.

Sejak saya beralih dari Delphi ke Java untuk aplikasi GUI (pada tahun 2002), saya tidak pernah menggunakan desainer lagi. Saya lebih suka manajer tata letak. Dan ya, Anda mendapatkan kode boilerplate, tetapi memindahkan objek pada desainer UI mungkin membutuhkan waktu sebanyak mengubah boilerplate. Plus, saya akan terjebak dengan IDE yang lambat; itu untuk kasus Java / C #, OK, sedangkan untuk Qt (terutama Qt4) tidak berlaku. Untuk Qt3, saya bertanya-tanya mengapa seseorang harus mengedit kode yang dihasilkan - bukankah mungkin untuk menambahkan kode di file lain? Untuk alasan apa?

Tentang kasus-kasus yang dibahas: 1) Hand Code GUI kemungkinan besar lebih cepat untuk menulis, setidaknya jika Anda tahu perpustakaan Anda. Jika Anda seorang pemula dan Anda tidak mengenal mereka, Anda dapat menghemat waktu dan belajar lebih sedikit dengan seorang desainer, karena Anda tidak perlu mempelajari API yang Anda gunakan. Tapi "belajar lebih sedikit" adalah faktor kuncinya, jadi dalam kedua kasus saya akan mengatakan GUI Kode Tangan.

2) Menu bar cukup mengganggu untuk menulis kode. Juga, pikirkan detail seperti akselerator dan sebagainya. Tetap saja, itu tergantung pada apa yang biasa Anda lakukan. Setelah beberapa waktu, mungkin akan lebih cepat untuk mengetik boilerplate itu daripada mengarahkan-dan-klik ke desainer untuk memperbaiki semua properti tersebut, tetapi hanya jika Anda benar-benar dapat mengetik seperti ke mesin tik (seperti admin yang mengetik perintah Unix lebih cepat daripada menggunakan GUI apa pun).

3) Saya akan memperluas jawaban untuk kasus # 2 menjadi yang ini. Perhatikan bahwa, untuk platform Win32, mungkin saja menggunakan desainer yang menghasilkan sumber daya Win32 mungkin lebih cepat memuat (tidak tahu tentang itu).

Namun, saya ingin menyebutkan masalah potensial dengan menggunakan Qt Designer di sana. Kasus dunia nyata: butuh beberapa detik (katakanlah 10) untuk memuat dialog Java yang kompleks (kotak dialog Preferensi untuk editor teks pemrogram) dengan banyak opsi. Perbaikan yang benar adalah memuat setiap tab hanya ketika programmer ingin melihatnya (saya menyadarinya setelah itu), dengan menambahkan metode terpisah ke setiap set preferensi untuk membangun GUI-nya.

Jika Anda mendesain semua tab dan pengalih tab bersama-sama dengan seorang desainer, dapatkah Anda melakukannya dengan mudah? Saya kira mungkin ada contoh serupa di mana GUI berkode tangan memberi Anda lebih banyak fleksibilitas, dan dalam aplikasi besar seperti itu, Anda cenderung membutuhkannya, bahkan jika hanya untuk tujuan pengoptimalan.

Blaisorblade
sumber
5
Manajer tata letak tidak saling eksklusif dengan desainer GUI. Faktanya, setiap desainer GUI yang tidak menggunakan semacam konsep pengelola layout lebih buruk daripada tidak berguna untuk bekerja pada 99% aplikasi GUI modern.
Steve S
7

Salah satu manfaat utama menggunakan desainer untuk membuat GUI adalah programmer lain dapat mengubah atau memelihara formulir dan widget dengan mudah tanpa perlu mempelajari kode yang rumit.

Nejat
sumber
5

Aneh bahwa Anda mengatakan kode penulisan lebih sederhana daripada memanipulasi objek dalam lingkungan grafis. Ini no-brainer.
Perancang ada untuk membuat hidup Anda lebih mudah dan dalam jangka panjang membuat kode Anda lebih mudah dipelihara. Lebih mudah mencari desainer untuk melihat seperti apa UI Anda, kemudian membaca kode dan mencoba membayangkan seperti apa tampilannya.
Dengan Qt saat ini Anda dapat melakukan hampir semua hal dari dalam perancang dan sangat sedikit hal yang tidak dapat Anda lakukan, Anda dapat memperbaiki dengan sangat sedikit baris kode di konstruktor. Ambil contoh contoh paling sederhana - menambahkan koneksi slot sinyal. Menggunakan perancang itu sesederhana klik dua kali. Tanpa desainer Anda perlu mencari tanda tangan yang benar dari sinyal, mengedit file .h dan kemudian mengedit menulis kode Anda di file .cpp. Perancang memungkinkan Anda berada di atas detail ini dan fokus pada hal yang benar-benar penting - fungsionalitas aplikasi Anda.

shoosh
sumber
3
Ya, itu sangat menarik bagi saya tetapi sejak sekitar beberapa tahun yang lalu ketika saya telah menggunakan Qt lebih dari 1 tahun, saya menyadari bahwa saya dapat melakukan pekerjaan UI lebih cepat dengan menulis tangan daripada dengan mendesain grafis. Satu hal yang kurang dalam kode ui tulisan tangan adalah tidak dapat dengan mudah dilihat bagaimana tampilannya sampai dieksekusi ke layar (dan kadang-kadang ini merupakan aspek penting dari kerja sama).
Joonhwan
1
Sama dia, saya tidak bisa mentolerir desainer, menulis dengan tangan jauh lebih kuat dan lebih cepat bagi saya, nah ini karena awalnya saya menggunakan mac yang sangat lambat, yang hampir tidak menangani drag and drop, dan setelah beberapa tahun itu menjadi satu-satunya cara Saya bisa membuat desain :) Tentang tidak bisa dilihat, nah setelah setahun saya tidak perlu mengeksekusinya, itu semua dipetakan di lapisan imajinasi otak saya.
ColdSteel
4

Saya suka beralih ke desainer untuk mengembangkan widget GUI. Seperti yang disebutkan di posting lain, lebih cepat. Anda juga mendapatkan umpan balik langsung untuk melihat apakah itu "terlihat benar" dan tidak membingungkan pengguna. Desainer adalah alasan utama saya memilih Qt daripada toolkit lainnya. Saya kebanyakan menggunakan desainer untuk membuat dialog satu kali.

Karena itu, saya melakukan jendela utama dan widget kompleks apa pun dengan tangan. Saya pikir ini adalah cara yang dimaksudkan Trolltech. QFormLayout adalah kelas yang mereka sediakan untuk membuat dialog masukan dengan mudah melalui program.

Omong-omong, desainer di Qt 4 bukanlah IDE seperti yang mereka miliki di Qt 3. Ini hanya editor untuk mengedit file .ui. Saya suka seperti itu. IDE lintas platform baru akan disebut Qt Creator.

Mark Beckwith
sumber
4

Ini adalah posting lama tapi saya akan menyarankan Anda untuk melihat Clementine - pemutar musik yang (menurut saya) berasal dari Amarok. Mereka menggunakan Qt4 dan dari apa yang saya lihat ada folder ui di folder src proyek. Dalam folder ui seperti yang diharapkan, mereka memiliki semua jenis file .ui. Jika Anda mengkompilasi dan menjalankan Clementine, Anda akan melihat bahwa GUI-nya cukup kompleks dan cukup bagus.

s5s
sumber
3

Bagi saya, itu tergantung seberapa banyak logika yang dikemas dalam widget / GUI. Jika ini hanya tentang bentuk sederhana, saya lebih suka menggunakan QtDesigner.

Jika itu berisi pemeriksaan atau interaksi yang rumit, saya cenderung memprogramnya.

Ben
sumber
Saya memiliki beberapa dialog jendela di aplikasi MFC yang semuanya sangat mirip. Baru-baru ini saya mencoba meletakkan semua kontrol pada satu dialog dan menyembunyikan serta memposisikan ulang kontrol tertentu berdasarkan mode aplikasi saat ini. Apakah Anda mengatakan di Qt Anda dapat dengan mudah membangun kontrol secara terprogram? Saya bertanya-tanya apakah itu akan lebih mudah dalam kasus saya. Akan sangat senang mendengar pikiran Anda.
mitch
Mitch, ya di Qt Anda dapat membangun kontrol secara terprogram, dan itu SANGAT mudah. Juga Qt menggunakan tata letak dinamis, dan ini berarti dialog Anda masih terlihat bagus dan dapat digunakan baik Anda menambahkan satu kotak centang atau dua puluh.
George Y.
2

Kami menggunakan Qt Designer jika ada yang perlu membuat Gui.
Masalahnya adalah membuat Widget kecil untuk tugas-tugas tertentu (seperti yang akan Anda lakukan dalam desain kelas) dan kemudian menggabungkannya menjadi "parent-gui".

Dengan cara ini widget Anda sangat dapat digunakan kembali dan dapat digunakan untuk Guis dengan cara modular. Anda hanya perlu menentukan sinyal mana yang dikirim setiap Widget dan slot mana yang mereka sediakan.

Kami juga membuat .ui-Files yang dapat dihasilkan selama proses pembangunan. Hingga saat ini tidak perlu mengedit file tersebut dengan tangan.

MOnsDaR
sumber
0

Buat bagian berbeda dari UI Anda
di file .ui yang berbeda menggunakan QtDesigner,
lalu satukan (dan tambahkan detail ) dalam kode.

Ada hal-hal yang tidak dapat Anda lakukan di Qt Designer, Anda hanya dapat melakukannya dalam kode,
jadi Qt Designer hanyalah salah satu bagian (hebat) dari rantai alat .

dave
sumber
Tepat seperti yang dikatakan @MOnsDaR
dave