0

在我的项目中,我有一个 QButtonGroup,里面有 256 个按钮。我还给每个按钮一个这样的 id:

void MainWindow::AddBlocksToGroup()
{
    QButtonGroup* blockGroup = new QButtonGroup(this);
    blockGroup->addButton(ui->Oblock_0, 0);
    ...
    blockGroup->addButton(ui->Oblock_255, 255);
}

我正在尝试遍历组中的所有按钮并更改它们的文本,但是当我的程序到达我循环遍历按钮的部分时,我不断收到错误消息。这是我目前必须遍历它们的内容:

for(int i = 0; i <= 255; i++)
{
    blockGroup->button(i)->setText("Test"); //Read access violation?
}

当我的程序到达这一点时,我的循环中总是会出现读取访问冲突。为什么是这样?

谢谢你的时间。

4

3 回答 3

1

我会为迭代代码执行此操作:

foreach(QAbstractButton *button, blockGroup->buttons()) {
    button->setText("Test");
}

如果这仍然让您崩溃,那么您的程序中还有其他事情正在使这些按钮指针无效。

于 2013-08-26T04:48:42.237 回答
0

我知道已经很久了,你可能已经解决了这个问题。如果不是,也许您需要检查blockGroup->buttons()返回值是否为空列表。如果它是一个空列表,那么您的程序将崩溃。

于 2018-08-31T03:10:44.807 回答
-1

您似乎正在创建一个blockGroup在您的AddBlocksToGroup()函数中调用的局部变量。也许您正在尝试做的是初始化MainWindow使用相同名称的成员变量?

所以而不是:QButtonGroup* blockGroup = new QButtonGroup(this);

你应该做:blockGroup = new QButtonGroup(this);

于 2013-08-26T08:07:12.193 回答