2011-11-26 17 views
12

Qt geliştirme konusunda yeniyim, bu yüzden tasarlamanız gereken bir kullanıcı arayüzüne bir çözüm araştırmaya çalışıyorum. Projem, oyuncuları küresel bir harita üzerinde hareket eden bir çevrimiçi oyunda simüle etmektir. Haritayı temsil etmek için, bir ızgara bölgesini temsil eden ızgaradaki her alanla birlikte bir 2B ızgara görüntülemem gerekiyor. O zaman oyundaki her oyuncunun yerini göstermem gerekiyor. Arka uç tamamen haritalıdır ve harita 2B dizi olarak uygulanmıştır. Izgarayı nasıl görüntüleyeceğime takıldım.Qt GUI Geliştirme - QGraphicsView kullanarak bir 2D ızgara görüntüleme

Yaptığım araştırma, bir QGraphicsView uygulamasının bunu yapmanın en iyi yolu olduğuna inanmamı sağladı, ancak ihtiyacım olanla ilgili bir öğretici bulamıyorum. Bunu nasıl uygulayacağına dair herhangi bir tavsiyesi varsa, bu çok takdir edilecektir.

Teşekkürler Dan

+0

Şahsen öğrenilen SD ile gönderilen örneklerden Qt grafikler hakkında çok şey K. [40000 cips] (http://doc.qt.nokia.com/stable/demos-chip.html), büyük sahnelerin görüntülenmesi için özel grafik görünümü ve grafik öğesinin uygulanmasına güzel bir örnektir. Kaynak kodunu okumak o kadar kolay değil, ama bu konuda iyi bir öğretici bulamadım. Btw, bazı [örnekler] (http://doc.qt.nokia.com/stable/examples-graphicsview.html) tamamen belgelenmiştir ve başlangıçta çok yardımcı olur. –

cevap

10

A 2D Izgara yatay ve dikey çizgilerin bir dizi başka bir şey değildir. 500x500 boyutunda bir haritanız olduğunu ve her iki yönde de çizgiler arasındaki mesafenin 50 olduğu bir ızgara çizmek istediğinizi varsayalım. Aşağıdaki örnek kod, size nasıl ulaşabileceğinizi gösterir.

// create a scene and add it your view 
QGraphicsScene* scene = new QGraphicsScene; 
ui->view->setScene(scene); 

// Add the vertical lines first, paint them red 
for (int x=0; x<=500; x+=50) 
    scene->addLine(x,0,x,500, QPen(Qt::red)); 

// Now add the horizontal lines, paint them green 
for (int y=0; y<=500; y+=50) 
    scene->addLine(0,y,500,y, QPen(Qt::green)); 

// Fit the view in the scene's bounding rect 
ui->view->fitInView(scene->itemsVBoundingRect()); 

Sen tekabül examples yanı sıra QGraphicsView ve QGraphicsScene belgeleri incelemelisiniz. Ayrıca grafik görüntülemeyi training videos görüntüleyebilir veya bazı grafikler Qt geliştirici günlerinden related videos görüntüleyebilir.

3

Sabit bir ızgara boyutuna veya sınırlı sayıda ızgara boyutuna sahipseniz, yapmayı sevdiğim şey gimp veya başka bir programda bir ızgara bloğu çizmek ve daha sonra bunu arka plan fırçası olarak ayarlamaktır bloğun sağ tarafı) qt görüntüyü tekrarlayacak ve size tam bir ızgara verecektir. Bunun da performans için iyi olduğunu düşünüyorum.

Programlarımın birinde kullandığım ızgara görüntüsü 10x10 pikseldir.

grid 10px

Sonra follwing olarak QGraphicsScene setBackgroundBrush çağırır:

scene->setBackgroundBrush(QBrush(QPixmap(":/grid/grid10.png"))); 
0

daha yerli yolu şudur: PyQt'de tarafından

scene = self.getScene()     # Your scene. 

brush = QBrush() 
brush.setColor(QColor('#999')) 
brush.setStyle(Qt.CrossPattern)   # Grid pattern. 
scene.setBackgroundBrush(brush) 

borderColor = Qt.black 
fillColor = QColor('#DDD') 
rect = QRectF(0.0, 0.0, 1280, 720)   # Screen res or whatever. 

scene.addRect(rect,borderColor,fillColor) # Rectangle for color. 
scene.addRect(rect,borderColor,brush)  # Rectangle for grid. 

Maalesef ...

+0

Bu cevabın C++ çözüm arayanlar için bir değeri olabileceğini düşünüyorum çünkü dönüşüm muhtemelen yeterince kolay. Ancak genelde lütfen sadece soruda belirtilen dile uygun cevaplar gönderin. Teşekkür ederim! –

İlgili konular