我正在实施一个俄罗斯方块。 在Qt Designer中我绘制了一个Frame小部件。 然后我组织了一个继承自该Frame的QtGlass。 因此,在Qt Designer中,它看起来像带有QtGlass类的Object框架。 现在我想让图形在现有的限制范围内移动(墙壁等)。 我正在尝试实现它,如下所示。 好吧,我遇到的事实是我无法访问我的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;
...
}
Figure.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;
}
...
}
答案 0 :(得分: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方法在图上设置框架。在这种情况下,成员需要是一个指针(尽管setter仍然可以通过引用传递)。