我正在编写一个游戏 - 我有一个 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());
}
您可以在传递给 Space 对象的 QPainter 对象上调用 QPainter::translate(),以便调整它们在使用时“看到”的原点。
如果您想屏蔽它们绘制的内容以确保它们只在分配的区域内绘制,您可以通过在调用它们的 render() 方法之前调用 QPainter 上的 setClipRect() 来实现。
当然,一旦你做到了这一点,你可能还可以将每个 Space 设为一个单独的 QWidget,因为无论如何,小部件的行为似乎正是你的目标。