如何分解屏幕/窗口的 QPainter 以仅绘制一部分?

问题描述 投票:0回答:1

我正在编写一个游戏 - 我有一个 Board 类,它由“Spaces”的表格/网格组成 - Spaces 和 Board 都有一个虚拟方法“render”,并传递 QPainter 引用。我想(如果可能的话)在主板上使用画家,并将屏幕上应该绘制的空间的矩形传递给每个空间。这可能吗?

就像棋盘占据一个矩形 0,0 -> 2000,2000 并且传递到左上角空间的矩形将为 0,0->100,100 - 下一个空间的矩形将为 100,0->200,100 -但就其所见,无论如何,它的矩形都只是 0,0->100,100 - 所以我可以分解正在完成的工作。这是一个简单的例子:

class Space
{
     // ...
public:
     //...
     virtual void render(QPainter *painter);
};

class Board
{
     QList<QList<Space>> mLstBoard;
public:
     // ...
     virtual void render(QPainter *painter);
};

class GamePanel : public QWidget
{
     Q_OBJECT
     Board *mBoard;
public:
     // ...
};

class MainWindow : public QMainWindow
{
     Q_OBJECT

     GamePanel mPnlMain;
public:
     //...
};

int main(int argc, char **argv)
{
     QApplication a(argc, argv);
     MainWindow wnd;
     wnd.show();
     return(a.exec());
}
c++ qt qpainter
1个回答
0
投票

您可以在传递给 Space 对象的 QPainter 对象上调用 QPainter::translate(),以便调整它们在使用时“看到”的原点。

如果您想屏蔽它们绘制的内容以确保它们只在分配的区域内绘制,您可以通过在调用它们的 render() 方法之前调用 QPainter 上的 setClipRect() 来实现。

当然,一旦你做到了这一点,你可能还可以将每个 Space 设为一个单独的 QWidget,因为无论如何,小部件的行为似乎正是你的目标。

© www.soinside.com 2019 - 2024. All rights reserved.