C++ 使用纹理画笔绘制,无需转换纹理

C++ 使用纹理画笔绘制,无需转换纹理,c++,qt,C++,Qt,我制作了一个轮廓框的简单纹理,并有以下绘制棋盘格图案的代码片段: scene.setSceneRect(0, 0, 1000, 1000); ui->g_view->setScene(&scene); QPixmap texture("block.png"); QBrush brush(texture); int count = 0; for(int x=0; x<1000; x += 50) { for(int y=0; y<1000; y += 5

我制作了一个轮廓框的简单纹理,并有以下绘制棋盘格图案的代码片段:

scene.setSceneRect(0, 0, 1000, 1000);
ui->g_view->setScene(&scene);

QPixmap texture("block.png");
QBrush brush(texture);

int count = 0;
for(int x=0; x<1000; x += 50) {
    for(int y=0; y<1000; y += 50) {
        if (count % 2 == 0) {
            scene.addRect(x, y, 50, 50, Qt::NoPen, brush);
        }
        count++;
    }
    // Offset rows by 1
    count++;
}
产生以下输出:

我所期望的是每次调用addRect都会从上角开始绘制纹理

但是,出于某种原因,qt也会使用绘制纹理的位置来平移纹理,这几乎就像纹理在背景中无限平铺,而addRect只是切掉一个窗口

如何使drawRect的行为符合我的预期,即无论x和y的值是什么,纹理始终从左上角绘制

编辑:block.png


我通过使用
addPixmap
方法解决了这个问题

//scene.addRect(x + 5, y + 5, 50, 50, Qt::NoPen, brush);
QGraphicsPixmapItem *pix_map = scene.addPixmap(texture);
pix_map->setPos(x + 5, y + 5);

分享这个街区。png@eyllanesc除了问题之外,提供答案会使回答者的生活更加简单。我只是玩玩代码(包括编译和运行),看看是否找到了什么。但是,我不需要费心设计
main
-方法,建立
QGraphicsView
等等。在少于10 loc的情况下应该是可行的,但我认为这是询问者的责任。@pasbi我现在不在计算机上打开此代码。我可以在约5小时内提供MWE。我不认为这比我发布的内容更重要,我所做的只是创建一个新项目,然后使用可视化GUI编辑器向名为“g_view”的窗口添加一个大的图形视图。项目的其余部分是我发布的代码。
//scene.addRect(x + 5, y + 5, 50, 50, Qt::NoPen, brush);
QGraphicsPixmapItem *pix_map = scene.addPixmap(texture);
pix_map->setPos(x + 5, y + 5);