C++ QButtonGroup setExclusive()问题
我正在尝试将一些QPushButton分组到QButtonGroup中,并进行排他性检查,但在启动之后,我仍然能够检查多个按钮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
// 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()
{
}