Qt: QList из QButtonGroup - PullRequest
       10

Qt: QList из QButtonGroup

0 голосов
/ 25 мая 2009

Эй! Я пытаюсь сделать следующее

    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?

Ответы [ 3 ]

3 голосов
/ 25 мая 2009

Функция QButtonGroup :: button возвращает кнопку для определенного идентификатора, но вы не использовали идентификатор, когда добавляли кнопку в группу кнопок. QButtonGroup :: button возвращает 0 в вашем примере, приводя к исключению доступа нулевого указателя.

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

Если вы измените код на

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

Ваш оригинальный код будет работать.

Я предпочитаю QList :: at, а не QList :: operator [], потому что вы не хотите изменять значение (== указатель) в списке.

1 голос
/ 25 мая 2009

Я думаю, что проблема связана с функцией в . Он возвращает элемент const, и вы вызываете в нем неконстантную функцию.

Вместо этого используйте оператор [] .

0 голосов
/ 25 мая 2009

ОК, я решил это так:

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

Неужели ты не понял, в чем проблема.

...