【问题标题】:Qt: QList of QButtonGroupQt:QButtonGroup的QList
【发布时间】: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 组?

【问题讨论】:

    标签: c++ qt linked-list


    【解决方案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。
      猜你喜欢
      • 2018-03-31
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 2013-07-04
      • 2011-09-29
      • 2010-10-21
      相关资源
      最近更新 更多