0

嘿!我尝试执行以下操作

    QList<QButtonGroup*> groups;
    for (int i=0; i<nGroup; i++)
    {
        QButtonGroup *objects = new QButtonGroup(this);
        objects->setExclusive(false);
        for (int j=0; j<nObject; j++)
        {
            Led *tempLed = new Led();
            tempLed->setAutoExclusive(false);
            layout->addWidget(tempLed,j,i,Qt::AlignLeft);
            objects->addButton(tempLed);
        }
        groups.append(objects);
    }

然后尝试做这样的事情:

groups.at(1)->button(2)->setChecked(true);

代码编译,但在运行时抛出未处理的异常。我究竟做错了什么?有没有更好的方法来创建 QButtonGroup 组?

4

3 回答 3

3

QButtonGroup::button 函数返回特定 ID 的按钮,但在将按钮添加到按钮组时没有使用 id。QButtonGroup::button 在您的示例中返回 0 导致空指针访问异常。

...
objects->addButton(tempLed);
...

如果您将代码更改为

...
objects->addButton(tempLed, j );
...

您的原始代码将起作用。

我更喜欢 QList::at 而不是 QList::operator[] 因为您不想更改列表中的值(==指针)。

于 2009-05-25T14:16:10.680 回答
1

我认为问题与. 它返回一个 const 项,并且您正在调用其中的一个非常量函数。

请改用运算符 []

于 2009-05-25T11:34:42.220 回答
0

好的,我这样解决了:

QButtonGroup *bG;
bG = groups[gr];
QAbstractButton *aB = bG->buttons()[obj];
aB->setChecked(command);

没有真正明白你有什么问题。

于 2009-05-25T10:59:56.067 回答