0

我有 NetBeans + Qt + MinGW。

你能告诉我我的程序发生了什么吗?我在 QtGlass.cpp 的第一个循环中放置了一个断点(在下面的评论中标记为断点)。 Arrow_n是一个表示按键事件的 int。如果我按任意箭头键,我只想绘制我的图形。

好吧,我在外循环。

i = 5
Falcon.get_x()+Falcon.get_width() = 7

然后我进入内循环。

j = 5
Falcon.get_y()+Falcon.get_height() = 7

在内循环的下一次迭代中Falcon.get_x() = 261。在内循环的下一次迭代中Falcon.get_x() = 65797

如果我停止调试并重新启动它,我将得到相同的数字。因此,这些 261 和 65697 的出现方式存在一定的规律性。但它怎么可能对我来说是一个谜,因为current_x从那时current_y起就没有改变过。我什至没有任何更改它们的设置方法。

你能帮我理解发生了什么吗?

然后我开始调试。

图.h

class Figure: public QObject{
    Q_OBJECT
public:
    bool shape[4][4];
private:
    int current_x;
    int current_y;
    int height;
    int width;

public:
    Figure();
    int testint;
    int test[2];
    int get_x();
    int get_y();
    int get_height();
    int get_width();

图.cpp

Figure:: Figure(){
    current_x = 5;
    current_y = 5;
    height = 2;
    width = 2;
}

int Figure:: get_x(){
    return current_x;
}

int Figure:: get_y(){
    return current_y;
}

int Figure::get_height(){
    return height;
}

int Figure::get_width(){
    return width;
}

QtGlass.cpp

void QtGlass::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    Figure Falcon;

    glassRedraw(painter);
    painter.setPen(QPen(Qt::red, 4));

    if (arrow_n > 0) {
        for (int i = Falcon.get_x(); i < (Falcon.get_x()+Falcon.get_width()); i++){ //Breakpoint.
            for (int j = Falcon.get_y(); j < (Falcon.get_y()+Falcon.get_height()); j++){
                if (Falcon.is_cell_filled(i,j)){
                    painter.fillRect(i * 30, j * 30, 29, 29, QBrush(Qt::green, Qt::SolidPattern));
                }
            }
        }
    }
4

0 回答 0