2009-06-24 26 views
8
ben Qt4 içinde widget'ı gösteren bazı grafik verileri yaratıyorum

ile QGraphicsScene kullanmalısınız ve ben bunun için QGraphicsScene kullanmaknası düzenleri ve widget'ları

Ancak veri öğeleri vb QGraphicsItem ler oluşturmak için cazip oldu Bazı kontrol katmanları eklemek istedim (örneğin, kaydırma çubukları, yakınlaştırma + diğer düğmeler gibi) - örneğin Google Haritalar ile benzer bir tarzda yapmak istiyorum. Diğer bir deyişle, widget, widget'ın her tarafında görüntülenecektir. widget'ın üstüne)). Bu yüzden onları sahneye ekleyebilmenin mümkün olabileceğini düşündüm (belki de veriler üzerinde gösterilecek olan QGraphicsGroupItem'un bir çocuğu olarak). Ancak tüm parçacığı yeniden boyutlandırdığımda & yeniden boyutlandırmak istiyorum, bu yüzden bunları yönetmek için bir QGraphicsLayout kullanmalıyım. Ama bu noktada, şeylerin oldukça karmaşık olduğunu keşfettim.

sorun QGraphicsLayout kullanırken, aşağıdaki kısıtlamaları tutun şudur:

  1. Sadece QGraphicsWidget bir düzen tarafından yönetilebilir
  2. QGraphicsLayout sadece QGraphicsWidget
çocukları yönetmek için kullanılabilir

Bu, denetimlerimi QGraphicsWidget s olarak oluşturmam gerektiği, veri parçacığına en üst düzey QGraphicsWidget eklenmesi gerektiği ve Bu en üst düzey widget’ın kendisiyim.

yüzden sormak istiyorum:

  1. klasik yaklaşım (yani tüm denetimler için düz eski aletler kullanmak ve yalnızca verileri görüntülemek için QGraphicsScene kullanın.) Daha makul olmaz mı?

  2. Bu durumda QGraphicsScene kullanımında herhangi bir avantaj var mı (performans veya basitlik ...)?

  3. Güçlü yanlarından yararlanmak için QGraphicsScene'u nasıl kullanmalıyım?

cevap

1

Eğer QGraphicsScene (veya başka türlü widget var) ekranınıza çoğu için uygun olduğunu düşünüyorsanız, bunu kullanın. Geçmişte, benzer şeyler için yaptığımız şey, QWidget'dan (tek yönlü veya başka bir şekilde) gelen özel bir widget yapmak ve kontrol widget'lerini bu widget'ın üstündeki bir mizanpaja koymaktır. Bu, tüm widget'ın çizilmek istediğiniz her şeyi çizim yaptığı ve kontrol widget'larının bunun üzerinde olduğu, tüm widget'ın yeniden boyutlandırıldığı gibi yeniden boyutlandırıldığı anlamına gelir.

Alternatif olarak, birkaç kez, düzen widget'larının kolayca işlenebilmesi için biraz karmaşık olan düzenlerimiz oldu. Özel bir düzen oluşturmak yerine, onları hiçbir düzen olmadan konumlandırdık ve bunları yeniden boyutlandırma etkinliğindeki kodda taşıdık. Sadece iyi çalışıyor.

+0

QGraphicsScene ile en büyük sorun aslında bir widget OLMADIĞIDIR. Otomatik olarak çizilen, yakınlaştırılabilen, vb. Öğelerden oluşan bir koleksiyon gibi bir şeydir. Anlattığınız şey klasik, sade eski widget tarzıdır ve muhtemelen buna bağlı kalacağım.Ben "parlak ve yeni" işlevselliğini kullanmak istedim, ama ikinci düşüncede, bana bu kadar parlak görünmüyor, birileri bana yanlış olduğunu kanıtlıyor :) – jpalecek

+0

jpalecek: "saatler" widget'ını kontrol et demo @ http: // www.qtsoftware.com/developer/pimp-my-widgets-developer-contest .. Bir saat widget'ına sahip olmaktan başka bir şey yoktur ama bunun için uygulama QGraphics (Scene | Widget | View | Item) ile yapılır. – rasjani

+0

@jpalecek: Ben bir QGraphicsScene bir widget olduğunu düşünmedim, bu yüzden "tek yönlü" mi kalmam gerektiğini söyledim. Ama bir QGraphicsView (ya da benzer bir şey) var, değil mi? Sahnelerinizle dönüşmesini istemediğiniz sürece, widget'larınızı bunun üzerine koymak isteyebilirsiniz. Sanırım bu durumda sade eski widget yolu daha basit ve daha düz. –

6

Qt 4.4 beri QGraphicsProxyWidget kullanarak bir QGraphicsScene klasik widget'lar yerleştirebilirsiniz:

QWidget *widget = new QWidget; 
QGraphicsScene scene; 
QGraphicsProxyWidget *proxy = scene.addWidget(widget); 
İlgili konular