QButtonGroup setExclusive()问题

时间:2014-11-18 22:27:22

标签: 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(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);

我认为,只需要处理一些事件。如果是真的,究竟是哪些事件? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

我试图复制你的例子,对我来说它运作正常:

widget.h:

#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

widget.cpp:

#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()
{
}

您的代码中可能不正常的一件事是我没有看到您设置布局的位置,但是出于简单原因,您可能没有添加代码。另一件事是,唯一排除的按钮是penBcircleB

检查我的示例,看看你做错了什么,也许可以回复一下。

答案 1 :(得分:-1)

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