1

我正在尝试将几个 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);

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

4

2 回答 2

2

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

小部件.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

小部件.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()
{
}

您的代码中可能出现的唯一问题是我看不到您在哪里设置布局,但可能出于简单原因您没有添加代码。另一件事是唯一的排除按钮是penBand circleB

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

于 2014-11-18T22:55:42.897 回答
-1

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

于 2014-11-18T22:58:37.483 回答