El Kodlu GUI ile Qt Designer GUI Karşılaştırması [kapalı]


115

Bu tatilleri Qt uygulamaları yazmayı öğrenerek geçiriyorum. Sadece birkaç saat önce Qt Designer hakkında bir şeyler okuyordum, bu da beni meraklandırdı: Qt'de gerçek dünya uygulamaları yazan insanlar GUI'lerini tasarlamak için ne kullanıyorlar? Aslında, insanlar genel olarak GUI'leri nasıl tasarlar?

Birincisi, kodu elle yazmanın kavramsal olarak Qt Designer'ı kullanmaktan daha basit olduğunu buldum, ancak karmaşık GUI'ler için Designer mantıklı olabilir. Tasarımcı kullanılarak büyük GUI'ler mümkün olabilir, ancak zamanla karmaşıklık arttıkça yönetilmeleri çok zor hale gelebilir (bu sadece benim görüşüm). Ayrıca, bu adamların yaptıklarına bir göz atmak için AmaroK kaynak kodunu indirdim ve addWidget () ve arkadaşları için birçok çağrı buldum, ancak Designer tarafından oluşturulan bu XML dosyalarının hiçbiri (bir yana: AmaroK şimdiye kadar en sevdiğim uygulama olmamalı herhangi bir platform).

Öyleyse, bir GUI oluşturmanın "doğru" yolu nedir? Tasarımcı mı yoksa kod mu? Bu tartışma için aşağıdaki GUI türlerini ele alalım:

  1. Sadece girdi alması, bazı sonuçları göstermesi ve çıkması gereken basit iletişim kutuları. Bir YouTube URL'sini alan ve videoyu kullanıcının sabit diskine indiren bir uygulama varsayalım. Bir aceminin başlayacağı türden uygulamalar.
  2. Orta düzey GUI'ler, örneğin, birkaç araç çubuğu / menü öğesi içeren yapışkan not düzenleyicisi gibi. Örneğin xPad'i ele alalım ( http://getxpad.com/ ). Çoğu uygulamanın "yardımcı programlar" kategorisine girdiğini söyleyebilirim.
  3. AmaroK veya OpenOffice gibi çok karmaşık GUI'ler. Onları gördüğün zaman tanırsın çünkü gözlerini kandırırlar.

Yanıtlar:


44

Designer ile deneyimimiz Qt3'te başladı.

Qt3

Bu noktada, Tasarımcı, daha sonra uygulamanızda derleyeceğiniz kod üretmek için kullanışlıdır. Bu amaçla kullanmaya başladık, ancak oluşturulan tüm kodlarla, bir kez düzenledikten sonra, düzenlemelerinizi kaybetmeden artık geri dönüp yeniden oluşturamazsınız. Biz sadece üretilen kodu alıp bundan sonra her şeyi elle yaptık.

QT4

Qt4, Tasarımcıda önemli ölçüde geliştirildi. Artık yalnızca kod üretmiyor, ancak Designer dosyalarınıza (xml olarak) dinamik olarak yükleyebilir ve bunları programınızdaki çalışan nesnelere dinamik olarak bağlayabilirsiniz - ancak oluşturulan kod yok, öğeleri Tasarımcı'da adlandırmanız ve yapıştırmanız gerekir kodunuzu kırmamak için isimlerle.

Benim değerlendirmem, Mac OS X'teki Interface Builder kadar kullanışlı olmadığı yönünde, ancak bu noktada Designer dosyalarını doğrudan bir programda kullanmayı görebiliyordum.

Qt3'ten beri Designer'a geri dönmedik, ancak yine de düzenleri prototiplemek ve hatalarını ayıklamak için kullanıyoruz.

Sorunlarınız için:

  1. Muhtemelen Qt'nin sunduğu standart diyalogları kullanmaktan kurtulabilirsiniz. QInputDialog veya QDialog'u alt sınıflarsanız, düğmelerinizin uygun platform düzenine sahip olduğundan emin olmak için QButtonDialogBox'ı kullandığınızdan emin olun.

  2. Sınırlı Tasarımcı işlevselliğine sahip xPad gibi muhtemelen daha sınırlı bir şey yapabilirsiniz.

  3. OpenOffice gibi bir şeyi yalnızca Designer ile yazabileceğinizi düşünmüyorum ama belki de konu bu değil.

Designer'ı tıpkı metin düzenleyiciniz gibi başka bir araç olarak kullanırdım. Sınırlamaları bulduğunuzda, bu yeni sorun için farklı bir araç deneyin. Tasarımcının bir avantajının, programcı olmayan başka birinin düzeni yapabileceği konusunda Steve S'ye tamamen katılıyorum.


23
Uic (.ui dosya derleyicisi) tarafından üretilen kodu değiştirmeye asla gerek olmamalıdır. Daha fazla işlevselliğe ihtiyaç duyulursa, oluşturulan sınıftan miras alan veya bunu üye olarak içeren ve gerekli kodu ekleyen yeni bir sınıf oluşturun.
Parker Coates

1
Qt3 ve Qt4'ün başlarında (2008 dolaylarında), Qt Designer'ın, ButtonGroups desteği eksikliği, özel yuvalar, QLayout'ları adlandırma vb. Yaklaşık 6 yıl, tüm bu sorunlar ele alındı. Mümkünse UI dosyalarını kullanmayı tercih ederim, düzenleri yeniden düzenlemek çok daha kolay ve bakımı çok daha az kodla sonuçlanıyor.
Brendan Abel

42

Qt Designer ve diğer araç takımları / UI araçlarıyla ilgili deneyimime göre:

  • UI araçları işi hızlandırır.
  • UI araçları, düzeni daha sonra değiştirmeyi kolaylaştırır.
  • UI araçları, programcı olmayanların UI tasarımı üzerinde çalışmasını kolaylaştırır / mümkün kılar.

Karmaşıklık genellikle bir UI aracında tasarımı birden çok UI dosyasına bölerek ele alınabilir. Her dosyaya küçük mantıksal bileşen grupları ekleyin ve her grubu, tüm kullanıcı arabirimini oluşturmak için kullanılan tek bir pencere öğesi olarak değerlendirin. Qt Designer'ın yükseltilmiş pencere öğeleri konsepti bu konuda yardımcı olabilir.

Projenin ölçeğinin herhangi bir fark yarattığını bulamadım. Deneyiminiz değişebilir.

UI araçlarıyla oluşturulan dosyalar (sanırım gerçekten isterseniz bunları elle yazabilirsiniz) genellikle çalışma zamanında dinamik olarak yüklenebilir (Qt ve GTK + her ikisi de bu özelliği sağlar). Bu, düzen değişiklikleri yapabileceğiniz ve bunları yeniden derlemeden test edebileceğiniz anlamına gelir.

Sonuç olarak, hem ham kod hem de UI araçlarının etkili olabileceğini düşünüyorum. Muhtemelen büyük ölçüde ortama, araç setine / UI aracına ve tabii ki kişisel tercihlere bağlıdır. UI araçlarını seviyorum çünkü beni hızlı bir şekilde kurup çalıştırıyorlar ve daha sonra kolay değişikliklere izin veriyorlar.


8

Çalıştığım kuruluş birkaç yıl önce GUI uygulamasını Qt'ye taşıdı. Sanırım bahsetmeye değer birkaç husus var:

  • Qt Designer ile çalışmak, en azından bu noktada gerçekçi bir seçenek değildi: Qt Designer ile yapılamayan çok fazla özellik vardı;
  • Korunması gereken kurallar ve yapı Qt Designer'ın kullanımını engelledi;
  • Designer olmadan başladıktan sonra, ona geri dönmek muhtemelen zordur;
  • en önemli yanı, programcıların GUI IDE kullanmaktan çok vi veya emacs kullanarak programlamaya alışkın olmalarıdır.

Yaklaşık olarak geriye giden kendi deneyimim. 4 yıl, Qt3.3 kullanıldığında, diyaloglardaki dinamik davranışın Designer'da gerçekleştirilmesi mümkün değildi.


8

Qt Designer'ı kullanmadan Qt'de karmaşık GUI'ler yazdığımı ve sürdürdüğümü söylemek gerekirse - Qt Designer'ı sevmediğim için değil, bu şekilde çalışmaya asla alışamadığım için.

Kısmen bir stil meselesi ve nereden geldiğiniz: Qt'ye başladığımda, Dreamweaver, Frontpage ve diğer görsel HTML araçlarıyla ilgili korkunç deneyimler yaşadım ve HomeSite ile kod yazmayı ve karmaşık düzen için Photoshop'a başvurmayı çok tercih ettim. sorunları.

Görsel araçlarda tutmaya çalıştığınız, ancak sonunda iyi anlaşılmayan şekillerde kodu ince ayar yapmak zorunda kaldığınız görsel kod IDE'lerinde bir tehlike var.

Örneğin iPhone geliştirmeyi öğrenmek, 'sihirli' görsel öğelere ('Bağlantılar denetçisindeki boş daireden Arayüz Oluşturucu penceresindeki nesneye sürükleyin ...') vurmayı sinir bozucu buldum. ben) düz eski kodla anlamak.

Qt ile iyi şanslar - bu harika bir araç setidir, ancak onu nasıl kullanırsanız kullanın ve Qt Creator harika bir IDE gibi görünüyor.


7

Örneğin, grafik tasarımcıyı kullanmanın nedenlerinden birinin Win32'de düzen yöneticilerinin olmaması olduğunu eklemeliyim. Yalnızca mutlak konumlandırma mümkündü ve bunu elle yapmak berbat olurdu.

GUI uygulamaları için Delphi'den Java'ya geçiş yaptığımdan beri (2002'de), artık tasarımcıları hiç kullanmadım. Düzen yöneticilerini daha çok seviyorum. Ve evet, ortak kod alırsınız, ancak bir UI tasarımcısında nesnelerin taşınması, standart şablonun değiştirilmesi kadar zaman alabilir. Artı, yavaş bir IDE ile sıkışıp kalırdım; bu Java / C # durumu için, tamam, Qt (özellikle Qt4) için geçerli değil. Soru 3 için, üretilen kodu neden birinin düzenlemesi gerektiğini merak ediyorum - diğer dosyalara kod eklemek mümkün değil miydi? Hangi sebeple?

Tartışılan durumlar hakkında: 1) El Kodlu GUI, en azından kitaplıklarınızı biliyorsanız, yazmak daha hızlıdır. Yeni başlayan biriyseniz ve onları tanımıyorsanız, kullandığınız API'leri öğrenmeniz gerekmediğinden bir tasarımcıyla zamandan tasarruf edebilir ve daha az öğrenebilirsiniz. Ancak "daha az öğren" anahtar faktördür, bu nedenle her iki durumda da El Kodlu GUI diyebilirim.

2) Menü çubukları kod yazmak için oldukça can sıkıcıdır. Ayrıca hızlandırıcılar gibi ayrıntıları da düşünün. Yine de, neye alıştığınıza bağlı. Bir süre sonra, tüm bu özellikleri düzeltmek için tasarımcıyı işaretleyip tıklatmaktan daha hızlı olabilir, ancak bir daktiloya gerçekten yazabiliyorsanız (Unix komutlarını yazmaktan daha hızlı olan yöneticiler gibi) herhangi bir GUI kullanarak).

3) 2 numaralı vakanın cevabını buna uzatırdım. Unutmayın Win32 platformları için, Win32 kaynakları oluşturmak tasarımcıları kullanarak o mümkün olabilir olabilir daha hızlı yükleme (Bu konuda hiçbir fikri) için.

Ancak, orada Qt Designer kullanımıyla ilgili olası bir sorundan bahsetmek istiyorum. Gerçek dünya örneği: Karmaşık bir Java iletişim kutusunu (bir programcının metin düzenleyicisi için Tercihler iletişim kutusu) birçok seçenekle yüklemek birkaç saniye (10 diyelim) aldı. Doğru düzeltme, her bir sekmeyi yalnızca programcı görmek istediğinde (bunu daha sonra fark ettim), GUI'sini oluşturmak için her tercih kümesine ayrı bir yöntem ekleyerek yüklemek olurdu.

Tüm sekmeleri ve sekme değiştiriciyi bir tasarımcı ile birlikte tasarlarsanız, bunu kolayca yapabilir misiniz? Sanırım, elle kodlanmış bir GUI'nin size daha fazla esneklik sağladığı benzer bir örnek olabilir ve bu kadar büyük bir uygulamada, sadece optimizasyon amacıyla bile olsa, buna ihtiyaç duymanız muhtemeldir.


5
Mizanpaj yöneticileri, GUI tasarımcılarını birbirini dışlamaz. Aslında, bir tür düzen yöneticisi konseptini kullanmayan herhangi bir GUI tasarımcısı, modern GUI uygulamalarının% 99'unda çalışmak için yararsız olmaktan daha kötüdür.
Steve S

7

GUI'ler oluşturmak için tasarımcıyı kullanmanın temel avantajlarından biri, diğer programcıların karmaşık bir koda girmeye gerek kalmadan formları ve pencere öğelerini kolayca değiştirebilmesidir.


5

Yazma kodunun grafiksel bir ortamda nesneleri manipüle etmekten daha basit olduğunu söylemeniz garip. Bu bir beyinsizdir.
Tasarımcı, hayatınızı kolaylaştırmak için oradadır ve uzun vadede kodunuzu daha sürdürülebilir hale getirir. Kullanıcı arayüzünüzün neye benzediğini görmek için tasarımcıya bakmak daha kolay, ardından kodu okuyup neye benzeyebileceğini hayal etmeye çalışmak daha kolay.
Mevcut Qt ile hemen hemen her şeyi tasarımcının içinden yapabilir ve yapamayacağınız çok az şeyi yapıcıda çok az satır kodla düzeltebilirsiniz. Örneğin en basit örneği ele alalım - bir sinyal yuvası bağlantısı eklemek. Tasarımcıyı kullanmak, çift tıklama kadar basittir. Tasarımcı olmadan, sinyalin doğru imzasını aramanız, .h dosyasını düzenlemeniz ve ardından kodunuzu .cpp dosyasına yazmanız gerekir. Tasarımcı, bu ayrıntıların üzerinde olmanıza ve gerçekten önemli olan şeylere, uygulamanızın işlevselliğine odaklanmanıza olanak tanır.


3
Evet, benim için çok önemliydi, ancak birkaç yıl önce Qt'yi 1 yıldan fazla kullandığımdan beri, grafik tasarımdan çok elle yazarak daha hızlı kullanıcı arabirimi çalışmaları yapabileceğimi fark ettim. Elle yazılmış kodlanmış kullanıcı arayüzünde eksik olan bir şey, ekranda çalıştırılıncaya kadar nasıl göründüğünün kolayca görülememesidir (ve bazen işbirliği çalışmalarının önemli bir yönüdür).
Joonhwan

1
Onunla aynı, tasarımcılara tahammül edemiyorum, elle yazmak benim için çok daha güçlü ve daha hızlı, çünkü bunun nedeni aslında çok yavaş bir mac kullanıyordum, sürükle ve bırakmayı zar zor idare ediyordum ve birkaç yıl sonra bu tek yol oldu Tasarımları yapabilirim :) Hakkında görülemiyor, peki bir yıl sonra onu yürütmeye gerek kalmadı, hepsi beynimin hayal katmanında haritalandı.
ColdSteel

4

GUI parçacıkları geliştirmek için önce tasarımcıya başvurmayı seviyorum. Diğer yazılarda da belirtildiği gibi, daha hızlı. Ayrıca, "doğru görünüp görünmediğini" ve kullanıcının kafasını karıştırıp karıştırmadığını görmek için anında geri bildirim alırsınız. Tasarımcı, diğer araç kitleri yerine Qt'yi seçmemin başlıca nedenlerinden biridir. Tek seferlik diyaloglar yapmak için çoğunlukla tasarımcıyı kullanıyorum.

Bunu söyledikten sonra, ana pencereyi ve herhangi bir karmaşık widget'ı elle yapıyorum. Sanırım Trolltech'in amaçladığı yol buydu. QFormLayout , kolayca programatik olarak bir girdi iletişim kutusu oluşturmak için sağladıkları bir sınıftır.

Bu arada, Qt 4'teki tasarımcı, Qt 3'teki gibi bir IDE değil. Bu sadece .ui dosyalarını düzenlemek için bir düzenleyici. Ben böyle seviyorum. Yeni platformlar arası IDE'nin adı Qt Creator olacak.


4

Bu eski bir gönderi, ancak Amarok'tan türetilmiş (sanırım) bir müzik çalar olan Clementine'e bakmanızı tavsiye ederim. Qt4 kullanıyorlar ve görebildiğim kadarıyla projenin src klasöründe bir ui klasörü var . Kullanıcı arabirimi klasöründe, beklendiği gibi, her türlü .ui dosyasına sahiptirler. Clementine'i derler ve başlatırsanız, GUI'nin oldukça karmaşık ve oldukça hoş olduğunu göreceksiniz.


3

Benim için, widget / GUI'de ne kadar mantığın kapsüllendiğine bağlı . Sadece basit formlardan ibaretse, QtDesigner'ı kullanmayı tercih ederim.

Karmaşık kontroller veya etkileşim içeriyorsa, onu programlama eğilimindeyim.


Bir MFC uygulamasında hepsi birbirine çok benzeyen birkaç pencere iletişim kutusu var. Son zamanlarda, tüm kontrolleri tek bir iletişim kutusuna koymayı ve uygulamanın mevcut moduna göre belirli kontrolleri gizlemeyi ve yeniden konumlandırmayı denedim. Qt'de kontrolleri programlı olarak kolayca oluşturabileceğinizi mi söylüyorsunuz? Benim durumumda daha kolay olur mu diye merak ediyordum. Düşüncelerinizi duymak isterim.
mitch

Mitch, evet Qt'de programlı olarak kontroller oluşturabilirsiniz ve bu ÇOK kolaydır. Ayrıca Qt dinamik düzen kullanır ve bu, diyaloğunuzun hala iyi göründüğü ve bir veya yirmi onay kutusu ekleseniz de kullanılabilir olduğu anlamına gelir.
George Y.

2

Herhangi birinin bir Gui oluşturması gerekiyorsa Qt Designer'ı kullanıyoruz.
Mesele, belirli görevler için (bir sınıf tasarımında yaptığınız gibi) sadece küçük Widget'lar oluşturmak ve sonra bunları bir "ebeveyn-gui" içinde bir araya getirmektir.

Bu şekilde, widget'larınız yüksek oranda yeniden kullanılabilir ve Guis için modüler bir şekilde kullanılabilir. Her bir Widget'ın hangi sinyalleri gönderdiğini ve hangi yuvaları sağladığını belirlemeniz yeterlidir.

Ek olarak, build işlemi sırasında oluşturulabilecek .ui dosyaları oluşturuyoruz. Şimdiye kadar bu dosyaları elle düzenlemeye gerek yoktu.


0


QtDesigner'ı kullanarak farklı .ui dosyalarında kullanıcı arayüzünüzün farklı bölümlerini oluşturun ,
ardından bunları kodda bir araya getirin (ve komplikasyonlar ekleyin).

Qt Designer'da yapamayacağınız şeyler vardır, yalnızca kodda yapabilirsiniz,
bu nedenle Qt Designer, araç zincirinin yalnızca bir (harika) parçasıdır .


Aynen @MOnsDaR'ın dediği gibi
dave
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.