SORU
4 NİSAN 2011, PAZARTESİ


Neden kötüye Qt model/view terminoloji mi?

Terminoloji model/görünüm kontrolleri ile Qt kullanılan kusurlu olduğunu düşünüyorum. their explanation page MVC Görünüm ve Denetleyici birleştirerek MV için basitleştirilmiş ki bu durum, aşağıdaki resim koyuyorlar:

picture explaining Qt MVC

Ancak bence, nesnelerin rolleri onlar yanlış isim vermişler ve bu, sanırım

  1. Birleştirilmiş Kumanda ile Görünüm dedikleri aslında bir görüş sadece.
  2. Model dedikleri aslında Denetleyicisi sadece.
  3. Eğer gerçekten bir model istiyorsanız kendi "" dir. Veriler bir yerde olurdu

Uygulamanızda Qt model/view bileşeni kullanırsınız normal ve aklı başında bir şekilde söylüyorum. İşte nedenleri:

  1. Bu genellikle, nesneleri kontrol mantığı belirli herhangi bir ekleme olmadan) olarak kullanılan Qt bileşenidir
  2. Bu, columnCount, veri vb toggle gibi birçok Qt yöntemleri uygulamak gerekir çünkü zor bir Model. modeliniz ile hiçbir ilgisi yoktur. Aslında tipik modeli yöntemleri Denetleyicileri vardır. Tabii ki, her iki Denetleyici uygulayabilirsinizveBurada mantık modeli, ama ilk kod tasarımı ve ikincisi onlar devlet olarak Denetleyici birleştirme ve Model Kumanda ve Görünüm oldukça kötü olurdu.
  3. Neden 2'de dediği gibi. eğer mutlaka resim üzerinde mavi kutu değil, daha ziyade "Veri" kutusu (tabii ki gerçek Veri iletişim). kesik değil bu Model mantığı ayırmak istiyorsanız

Qt yanlış onların terminolojisinde, ya da sadece anlamayan ben miyim? (BTW: akademik soru, kendi adlandırma aşağıdaki projemi kodu başladım bile değil neden ve yakında öğrendim, kurallar açıkça bu doğru değildir, bunun nedeni. Fark ettim ki zaman sonraydı, Model dediğimiz Model mantık koymak denemelisiniz ;-) )

CEVAP
19 Mayıs 2012, CUMARTESİ


Kısa cevap

Qt MVC için geçerlidirbir veri yapısı. Bir MVC hakkında konuşurkenuygulamaQAbstractItemModel QListView düşünmelisin.

Eğer bütün programı için MVC mimarisi istiyorsanız, Qt "büyük"/view çerçeve modeli. böyle olmadı Ama programda her veri listesi / ağaç için gerçekten bir olan Qt MVC yaklaşım kullanabilirsinizdenetleyicisionun görünümü içinde.veriiçinde veya dışında modeli; bu bağlıdır ne tür bir model kullanıyorsunuz (kendi modeli alt sınıf: muhtemelen içinde modeli; örneğin QSqlTableModel: dışarıda (ama belki önbelleğe içinde) modeli). Modelleri ve görüşlerini bir araya getirmek için kullanın sonra uygulamak hangi sınıfların kendiiş mantığı.


Uzun cevap

Qt model/view yaklaşım ve terminoloji:

Qt basit sağlarmanzarasıkendi modelleri için. Bir onlar vardenetleyicisidahili: çoğu durumda bir denetleyici ne seçme ve düzenleme öğeleri hareket eden bir şey "kontrol". Yani kullanıcı giriş (fare tıklaması ve hareket) çeviri ve modeline uygun komutlar vermek.

Qtmodellerigerçekten modeller temel veri olan. Elbette soyut modeller Qt onları saklamak için ne kadar istediğini bilmiyor çünkü veri tutmayın. Amasanaalt veri kaplar ekleme ve model arayüz verilere yaparak ihtiyaçlarınız için bir QAbstractİtemModel uzatın. Bu gibi değilsin sanırım aslında, ve bu yüzden, sorun busanaveri yapısı veri erişilebilir ve değiştirilebilir olduğunu, bu yüzden model, program gerekiyor.

MVC terminolojisinde, bir modeli de içerirverivemantık. Qt, ya da model içinde iş mantığı bazı ilaçlar ya da dışarı koymak, "" kendi kendine. görünümünde bir varlık olup olmaması sana kalmış Hatta mantık ile kastedilen ne olduğu belli değil: Seçme, yeniden adlandırma ve taşıma öğeleri etrafında? =>zaten uygulanmaktadır. Onlarla hesaplamalar yapıyor? =>Ya da model alt sınıf dışında içine koy. Bir dosya/depolama ya da veri yükleme? =>Model alt sınıf içine koy.


Benim kişisel görüşüm

Çok zor bir iyi sağlamak içinvebir programcı için genel MV(C) sistemi. Modeller basit ve çoğu durumda (örneğin, yalnızca dize listeleri) çünkü Qt de kullanıma hazır bir QStringListModel sağlar. Ama eğer veri dizeleri daha karmaşık ise, Qt model/view arabirimi üzerinden verileri temsil etmek istiyorum nasıl size kalmış. Eğer varsa, örneğin, 3 alanlar (hadi isim, yaş ve cinsiyet ile kişi demek) ile bir yapı, 3 farklı rolleri için 3 farklı sütun veya 3 alanları atayabilirsiniz. Her iki yaklaşım sevmiyorum.

Qt model/view çerçeve görüntülemek için istediğiniz zaman yararlı olduğunu düşünüyorumbasit veri yapıları. Zor eğer veri işlemek olurözel türlerya ağaç ya da bir liste olarak yapılandırılmış (örneğin grafik). Çoğu durumda, listeleri yeterli ve hatta bazı durumlarda bir model sadece tek bir giriş tutmak gerekir. Özellikle tek giriş farklı özellikler (bir sınıfın bir örneği) olan modeli istiyorsanız, Qt model/view çerçeve kullanıcı arayüzü mantığı ayırmak için doğru yol değil.

Şeyler özetle, Qt model/view çerçeve yararlı verileri birini izlemiş ancak ve ancak olduğunu düşünüyorumQt görüntüleyici widget. Eğer sadece bir giriş, örneğin, uygulama ayarları, bir holding modeli için kendi izleyici yazmak üzeresin ya da veri yazdırılabilir tip değil ama bir işlevi yok.


Nasıl bir içinde Qt model/view (büyük) kullanın uygulama yaptım?

Bir keresinde (takım) birden fazla Qt model verileri yönetmek için kullandığı bir uygulama yazdım. Her biri farklı farklı özel bir türü olan gerçek verileri tutmak için DataRole model bir alt sınıf oluşturmaya karar verdik. Dış model Sınıfı Model tüm farklı Qt modelleri tutuyor, biz yarattık. Ayrıca dış görünüm View Model içinde modellere bağlı windows (widget) tutuyor, sınıf yarattı. Bu yaklaşım genişletilmiş Qt bir MVC, kendi ihtiyaçlarına adapte. Model View her iki sınıf Qt MVC ile bir ilgisi var kendileri yok.

Nereye koymuştuk bizmantık? Kaynak modeller değişti () veri okuma ve hedef modeller sonuçları yazarak verileri üzerinde yapılan hesaplamalar yaptım sınıfları oluşturduk. Qt bu bakış açısından, bu mantık dersleri olurdu manzarası, çünkü "Bağlan" modeller ("görünüm" için Kullanıcı, ama bir "görünüm" iş mantığı kısmını uygulama).

Nerededenetleyicileri? Orijinal MVC terminoloji, denetleyicileri kullanıcı giriş (fare ve klavye) yorumlar ve istenen eylemi gerçekleştirmek için model komutları verin. Qt zaten ve öğeleri yeniden adlandırma, taşıma gibi yorumlamak kullanıcı giriş görünümleri beri, bu gerekli değildi. Ama istediğimizi Qt görüşlerini ötesinde kullanıcı etkileşimi bir yorumu oldu.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Easy Learn Tutorial

    Easy Learn T

    10 Kasım 2012
  • mliskIT

    mliskIT

    29 Mart 2012
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006