我是Qt开发的新手,所以我正在尝试研究我需要设计的用户界面的解决方案。我的项目是模拟在全球地图中移动的在线游戏中的玩家。为了表示地图,我需要显示2D网格,网格中的每个空间代表地图的一个区域。然后我需要显示游戏中每个玩家的位置。后端完全正常工作,地图实现为2D阵列。我只是坚持如何显示网格。
我所做的研究让我相信QGraphicsView是最好的方法,但我似乎无法找到与我需要的相关的教程。如果有人对如何实现这一点有任何提示,将不胜感激。
谢谢,Dan
答案 0 :(得分:10)
2D网格只不过是一组水平和垂直线条。假设您有一个500x500的地图,并且您想要绘制一个网格,其中两个方向上的线之间的距离为50.下面的示例代码向您展示如何实现它。
// 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());
您应该查看QGraphicsView
和QGraphicsScene
文档以及相应的examples。您还可以在Qt开发者日期间观看图形视图training videos或某些图形视图related videos。
答案 1 :(得分:3)
如果您有一个恒定的网格大小或甚至有限数量的网格大小,我想做的是在gimp或任何其他程序中绘制网格块然后将其设置为背景画笔(仅绘制底部和右侧块的一侧)qt将重复图像,并为您提供一个完整的网格。我认为这对性能也有好处。
这是我在我的一个程序中使用的网格图像,它是10x10像素。
然后调用QGraphicsScene
setBackgroundBrush作为以下内容:
scene->setBackgroundBrush(QBrush(QPixmap(":/grid/grid10.png")));
答案 2 :(得分:1)
更原生的方式是:
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.
抱歉PyQt ......
答案 3 :(得分:0)
假定将场景设置为graphicsview,然后仅在一行下面显示网格。
ui->graphicsView->scene()->setBackgroundBrush(Qt::CrossPattern);
可以为ex传递其他几个值:Qt::Dense7Pattern
这些是enum BrushStyle
的成员,只需单击Qt创建器中的任何使用的值,它将带您到枚举声明,您可以在其中看到所有其他可能的值。
PS: 可以这样设置场景:
ui->graphicsView->setScene(new QGraphicsScene());