Qt中的无限网格

时间:2014-07-14 01:29:39

标签: qt grid qgraphicsview

我在Qt中创建了一个图形视图大小的网格。 Whenevr我放大/缩小,网格在一个小区域可见。可以在整个区域进行绘图,但网格仅限于较小的区域。

我使用以下代码创建了网格:

for(int x = 0; x <= ui->graphicsview->width(); x += 10){
    scene->addLine(x,0,x,ui->graphicsView->height(),QPen(Qt::green));
}
for(int y = 0; y <= ui->graphicsView->height(); y += 10){
    scene->addLine(0,y,ui->graphicsView->width(),y,QPen(Qt::green));
}

如何使网格无限,以便在缩小时,网格仍然会在等于图形视图大小的区域上保留?

2 个答案:

答案 0 :(得分:1)

你可以画&#34;无限&#34;使用QGraphicsView框架的行。

QGraphicsView QGraphicsScene 进行子类化,并在QGraphicsView::drawBackground()QGraphicsScene::drawBackground()中实现网格绘图。

drawBackground()方法中,您必须计算外露矩形(此方法的 rect 参数)与网格线之间的交叉点。

然后,使用带有计算交叉点的QPainter::drawLine()绘制线条。

我知道,这是对这个概念的非常简短的解释,但我希望它会有所帮助。 如果没有,我可以详细解释。
几年前,一个人面临类似的问题。

答案 1 :(得分:0)

视图只是查看场景的一小部分的“相机”的大小。如果场景没有在所有方向上填充非常长的线条,则在缩小时它不会显示在视图上。一旦视图改变,使行成为当前视图的大小几乎一文不值。确定“无限”对您的应用程序意味着什么,并将所有适当的行添加到场景中。您可能需要一个加载屏幕,因为您的程序正在添加所有这些。

或者您可以进行一些延迟加载,只会在视图平移或缩小时将线条添加到场景中。

查看Qt库附带的40000芯片示例,了解如何处理几乎无限的对象,以及如何在开始缩小时处理细节级别的变化。

希望有所帮助。