Qt:QButtonGroup的QList
Posted
技术标签:
【中文标题】Qt:QButtonGroup的QList【英文标题】:Qt: QList of QButtonGroup 【发布时间】:2009-05-25 10:33:15 【问题描述】:嘿!我尝试执行以下操作
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 组?
【问题讨论】:
【参考方案1】:QButtonGroup::button 函数返回特定 ID 的按钮,但在将按钮添加到按钮组时没有使用 id。 QButtonGroup::button 在您的示例中返回 0 导致空指针访问异常。
...
objects->addButton(tempLed);
...
如果把代码改成
...
objects->addButton(tempLed, j );
...
你的原始代码可以工作。
我更喜欢 QList::at 而不是 QList::operator[] 因为您不想更改列表中的值(==指针)。
【讨论】:
【参考方案2】:我认为问题与at 函数有关。它返回一个 const 项,并且您正在调用其中的一个非常量函数。
请改用operator[]。
【讨论】:
是的,我现在对 QList 和 QButtonGroup 都使用 operator[]。谢谢! 小心使用操作符[],你可能会犯错误并有不受欢迎的行为。【参考方案3】:好的,我是这样解决的:
QButtonGroup *bG;
bG = groups[gr];
QAbstractButton *aB = bG->buttons()[obj];
aB->setChecked(command);
真的不明白你的问题是什么。
【讨论】:
显然 button(2) 是错误的,因此需要使用 buttons()[2]。不能说更多,因为我几乎从不使用 Qt。以上是关于Qt:QButtonGroup的QList的主要内容,如果未能解决你的问题,请参考以下文章