C++ QButtonGroup setExclusive()问题

C++ QButtonGroup setExclusive()问题,c++,qt,qt5.3,C++,Qt,Qt5.3,我正在尝试将一些QPushButton分组到QButtonGroup中,并进行排他性检查,但在启动之后,我仍然能够检查多个按钮 // pen toggle button penB.setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); penB.setIconSize(QSize(ICON_SIZE,ICON_SIZE)); penB.setCheckable(true); penB.toggle(); penB.setIcon(QI

我正在尝试将一些QPushButton分组到QButtonGroup中,并进行排他性检查,但在启动之后,我仍然能够检查多个按钮

// pen toggle button
penB.setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
penB.setIconSize(QSize(ICON_SIZE,ICON_SIZE));
penB.setCheckable(true);
penB.toggle();
penB.setIcon(QIcon(":icons/pen.png"));
// circle toggle button
circleB.setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
circleB.setIconSize(QSize(ICON_SIZE,ICON_SIZE));
circleB.setCheckable(true);
circleB.setIcon(QIcon(":icons/circle.png"));

figureBox.addButton(&penB);
figureBox.addButton(&circleB);
figureBox.setExclusive(true);
// add buttons to grid
layoutG.addWidget(&openB,1,1);
layoutG.addWidget(&saveB,1,2);
layoutG.addWidget(&penB,1,3);
layoutG.addWidget(&circleB,2,3);
我认为,它只需要处理一些事件。如果是真的,具体发生了哪些事件?
提前感谢。

我已经尝试复制您的示例,对我来说效果不错:

widget.h:

在您的代码中有一件事可能不好,那就是我看不到您在哪里设置布局,但可能是因为简单的原因您没有添加代码。另一件事是,唯一排除的按钮是
penB
circleB


看看我的例子,看看你做错了什么,也许会回来反馈。

对不起,伙计们。该上床睡觉了。我忘了在.h文件中声明QButtonGroup,它是在本地函数中声明的,所以只是内存泄漏。

你能说明按钮是如何创建的吗?我怀疑它们也没有共同的父对象,最好在堆上创建youre Qt对象,因为所有权应该转移到parent@yankee2905,QPushButton-penB;QPushButton圈;作为.h文件中的私有字段,与中的.cpp代码属于同一类question@yankee2905,尝试在堆中创建-无用。我不会说它无用,从本地堆栈向布局添加小部件是不安全的
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QButtonGroup>
#include <QGridLayout>

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    QGridLayout layoutG;
    QButtonGroup figureBox;
    QPushButton openB;
    QPushButton saveB;
    QPushButton penB;
    QPushButton circleB;
};

#endif // WIDGET_H
#include "widget.h"


Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    // pen toggle button
    penB.setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    penB.setIconSize(QSize(16, 16));
    penB.setCheckable(true);
    penB.toggle();

    // circle toggle button
    circleB.setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    circleB.setIconSize(QSize(16, 16));
    circleB.setCheckable(true);

    figureBox.addButton(&penB);
    figureBox.addButton(&circleB);
    figureBox.setExclusive(true);

    // add buttons to grid
    layoutG.addWidget(&openB,1,1);
    layoutG.addWidget(&saveB,1,2);
    layoutG.addWidget(&penB,1,3);
    layoutG.addWidget(&circleB,2,3);

    setLayout(&layoutG);
}

Widget::~Widget()
{
}