0

我正在实施俄罗斯方块游戏。在 Qt Designer 中,我绘制了一个 Frame 小部件。然后我组织了一个继承自该 Frame 的 QtGlass。因此,在 Qt Designer 中,这看起来像带有 QtGlass 类的对象框架。现在我想让人物在现有限制(墙壁等)内移动。我正在尝试实现它,如下所示。

好吧,我遇到了我无法到达我的 QtGlass 对象的事实。所以,我知道它有一个方法 isMovementPossible(),但我不知道如何使用它。我的 QtGlass 实例似乎被称为“框架”,但如果我使用这个名称,我会收到错误“无法解析识别框架”。

QtGlass.h

    #ifndef QTGLASS_H
    #define QTGLASS_H
    
    #include <QFrame>
    #include "Figure.h"
    
    class QtGlass : public QFrame {
        Q_OBJECT
    
    public:
        bool isMovementPossible();

    protected:
        Figure Falcon;
    ...
    }

图.cpp

#include "Figure.h"
#include "QtGlass.h"
#include <QtGui>
#include <QtGui/QApplication>

void Figure::set_coordinates(int direction) {
    previous_x = current_x;
    previous_y = current_y;
    switch (direction) {
        case 1:
        {//Qt::Key_Left:            
            current_x -= 1;
            if (frame->isMovementPossible()) {
                break;
            }
            current_x += 1;
            break;
        }
...
}
4

1 回答 1

0

要在您的Figure方法中可访问,该frame变量必须是全局变量或您的Figure类(或超类)的成员。

QtGlass如果您需要在实例中访问您的Figure实例,那么您需要将引用(或指针)传递给它。您可以将其传递给Figure构造它的时间(假设框架比图形寿命更长),也可以将其作为参数传递给需要它的方法。

例如,如果您的框架总是比其中的数字寿命长,那么您可以简单地执行类似的操作

class QtGlass; // forward declare to avoid circular header include

class Figure
{
public:
    Figure( const QtGlass& glass ) : frame( glass ) {}

    void set_coordinates(int direction) {
        // ...
        if (frame.isMovementPossible()) {
            break;
        }
        // ...
    }

    // other methods...

private:
    const QtGlass& frame;
    // other members...
};

你的QtGlass构造函数可以做

QtGlass::QtGlass( QWidget* parent )
    : QFrame( parent )
    , Falcon( *this )
{
}

或者,如果在施工时设置框架不方便,您可以使用专用的设置方法来设置图形上的框架。不过,在这种情况下,成员需要是一个指针(尽管 setter 仍然可以通过引用传递)。

于 2013-05-13T19:49:43.717 回答