我正在尝试通过独占检查将一些 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:
#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()
{
}
您的代码中唯一可能有问题的地方是我看不到您在哪里设置布局,但也许您出于简单原因没有添加代码。另一件事是,唯一排除的按钮是 penB
和 circleB
。
检查我的示例,看看您做错了什么,也许会回来提供反馈。
关于c++ - QButtonGroup setExclusive() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27005346/