2011-11-26 17 views
12

Soy nuevo en el desarrollo de Qt, así que estoy tratando de buscar una solución para una interfaz de usuario que necesito diseñar. Mi proyecto es simular jugadores en un juego en línea moviéndose alrededor de un mapa global. Para representar el mapa, necesito mostrar una cuadrícula 2D, con cada espacio en la cuadrícula representando una región de un mapa. Entonces necesito mostrar la ubicación de cada jugador en el juego. El back-end funciona completamente, con el mapa implementado como una matriz 2D. Solo estoy atascado en cómo mostrar la grilla.Desarrollo de interfaz gráfica de usuario de Qt: visualización de una cuadrícula 2D utilizando QGraphicsView

La investigación que he realizado me ha llevado a creer que QGraphicsView es la mejor manera de hacerlo, pero parece que no puedo encontrar un tutorial relevante para lo que necesito. Si alguien tiene algún consejo sobre cómo implementar esto, sería muy apreciado.

Gracias, Dan

+0

personalmente aprendido mucho sobre gráficos Qt de ejemplos que se envían con SD K. [40000 chips] (http://doc.qt.nokia.com/stable/demos-chip.html) es un buen ejemplo de la implementación de vista gráfica personalizada y elementos gráficos para mostrar escenas de gran tamaño. Leer el código fuente no es tan fácil, pero no encontré ningún tutorial decente sobre ese tema. Por cierto, algunos de los [ejemplos] (http://doc.qt.nokia.com/stable/examples-graphicsview.html) están completamente documentados y ayudan mucho al principio. –

Respuesta

10

Una rejilla 2D no es más que un conjunto de líneas horizontales y verticales. Supongamos que tiene un mapa de 500x500 y desea dibujar una cuadrícula donde la distancia entre las líneas en ambas direcciones es 50. El código de muestra siguiente muestra cómo puede lograrlo.

// 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()); 

debe comprobar el QGraphicsView y la documentación QGraphicsScene, así como el correspondiente examples. También puede ver la vista de gráficos training videos o algunos gráficos ver related videos desde los días de desarrollador de Qt.

3

Bueno, si tiene un tamaño de cuadrícula constante o incluso un número limitado de cuadrículas, lo que me gustaría hacer es dibujar un bloque de cuadrícula en Gimp o cualquier otro programa y luego configurarlo como fondo (dibujar solo abajo lado derecho del bloque) qt repetirá la imagen y le dará una cuadrícula completa. Creo que esto también es bueno para el rendimiento.

Esta es la imagen de cuadrícula que utilicé en uno de mis programas es de 10x10 píxeles.

grid 10px

A continuación, llame QGraphicsScene setBackgroundBrush como el follwing:

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

La forma más nativa es la siguiente:

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. 

sentimos por PyQt ...

+0

Creo que esta respuesta podría tener algún valor para aquellos que buscan una solución en C++, porque la conversión es probablemente bastante fácil. Pero, en general, solo publique respuestas que coincidan con el idioma especificado en la pregunta. ¡Gracias! –

Cuestiones relacionadas