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的主要内容,如果未能解决你的问题,请参考以下文章

Qt设计界面中窗口的折叠,该怎么处理

Qt的Radio Button(单选按钮)

Qt入门系列开发教程基础控件篇复选按钮QCheckBox

QButtonGroup 的使用

QT中button的问题

判断QButtonGroup中哪个QRadioButton被选中