// 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());
5条答案
按热度按时间pbgvytdp1#
二维网格只不过是一组水平和垂直线。假设你有一个500x500的Map,你想绘制一个网格,其中两个方向上的线之间的距离是50。下面的示例代码向您展示了如何实现它。
您应该检查
QGraphicsView
和QGraphicsScene
文档以及相应的examples。你也可以观看图形视图training videos或一些图形视图相关的视频,从Qt开发者的日子。exdqitrt2#
好吧,如果你有一个恒定的网格大小,甚至是有限数量的网格大小,我喜欢做的是在gimp或任何其他程序中绘制一个网格块,然后将其设置为背景画笔(只绘制块的底部和右侧)qt将重复图像,并将给予你一个完整的网格。我认为这对性能也有好处。
这是我在我的一个程序中使用的网格图像,它是10x10像素。
然后调用
QGraphicsScene
setBackgroundBrush如下:t40tm48m3#
更本土的方式是这样的:
对不起,PyQt…
z9smfwbn4#
假设一个场景被设置为graphicsview,那么下面一行将显示网格。
可以为ex传递几个其他值:
Qt::Dense7Pattern
这些是
enum BrushStyle
的成员,只需在Qt creator中单击任何使用的值,它将带您到enum声明,在那里您可以看到所有其他可能的值。PS:场景可以这样设置:
of1yzvn45#
实际上有一个Qt示例代码演示了QGraphicsView/QGraphicsScene中的网格线。在图场景示例中,可以启用网格线。该实现使用了
QGraphicsScene::setBackgroundBrush
,如果你仔细研究这个例子,你会发现这种方法的问题所在:如果你对场景应用缩放变换,背景笔刷会变成像素化。如果您要允许深度缩放场景,更好的方法是继承
GraphicsScene
并在自定义场景类中覆盖drawBackground()
。这样做非常容易,因为drawBackround接收到一个矩形,要在场景坐标中绘制;你只需要找出矩形中的网格线。