c++ - 如何初始化 QGraphicsItem 的二维数组

标签 c++ arrays qt segmentation-fault

我将 Qt 用于一些 gui 的东西,我继承了 QGraphicsScene 来实现我自己的一些方法,我所做的其中一件事是创建一个 QGraphicsItems 列表,特别是我制作的对象的二维数组继承了 QGraphicsItem。

MatrixButton **buttons;

然后,当我使用此方法从 QGraphicsScene 初始化列表时,出现段错误。

void MatrixScene::initScene()
{
    this->setSceneRect(0, 0, this->width*BUTTON_SIZE, this->height*BUTTON_SIZE);
    this->currentFrameIndex = 0;
    this->color = Qt::red;
    this->buttons = new MatrixButton*[this->height];
    for (int i = 0; i < this->height; i++){
        this->buttons[i] = new MatrixButton[this->width];
    }
    for (int x = 0; x < this->width; x++){
        for (int y = 0; y < this->height; y++){
            this->buttons[x][y].setPos(x*BUTTON_SIZE, y*BUTTON_SIZE); //SEGMENTATION FAULT!!!
            this->addItem(&this->buttons[x][y]);
        }
    }
    this->update();
}

当我调试应用程序时,调试器告诉我问题是由 QGraphicsItem.h 中的以下行引起的:

inline void QGraphicsItem::setPos(qreal ax, qreal ay)
{ setPos(QPointF(ax, ay)); }

根据调试器,具体来说,当 ax = 640ay = 0 时会发生错误。我不明白在这种情况下会导致段错误的原因。

最佳答案

您的问题是您使用 x 作为行的索引,使用 y 作为列的索引,但边界条件恰好相反

因此将您的代码修改为:

for (int x = 0; x < this->height; x++){
        for (int y = 0; y < this->width; y++){
            this->buttons[x][y].setPos(x*BUTTON_SIZE, y*BUTTON_SIZE);        
            this->addItem(&this->buttons[x][y]);
        }
    }

关于c++ - 如何初始化 QGraphicsItem 的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40040830/

相关文章:

c++ - MFC如何将两个对话框合并为一个对话框?

c++ - C++模板中的运算符重载

c++ - 有没有办法从用户模式调用 Windows Native API 函数?

c++ - 尝试打开目录进行读取时,CreateFile 总是返回错误 5(访问被拒绝)

javascript - 从 JavaScript 数组生成 2-opt 交换邻域

python - 如何向 Qt Mainloop 添加函数

arrays - 使用命令输出中引用的条目在 Bash 中创建数组

C++11 - 单独 move 数组(原始数组、std::array、std::vector)的每个元素?

c++ - QStringListModel排序

c++ - 如何使用grabWindow只对窗口的某个区域进行截图?