简体   繁体   English

QButtonGroup setExclusive()问题

[英]QButtonGroup setExclusive() issue

I'm trying to group a few QPushButton`s into QButtonGroup with exclusive checking, but after launch i'm still able to check multiple buttons. 我试图通过排他检查将一些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);

I think, its just need to procees some events. 我认为,它只需要进行一些事件即可。 If its true, which events exactly? 如果它是真的,那到底是哪个事件? Thanks in advance. 提前致谢。

I've tried to replicate your example and for me it works OK: 我试图复制您的示例,对我来说,它可以正常运行:

widget.h: 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: 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()
{
}

The single thing that could be not ok in your code is that I don't see where you set the layout, but maybe you didn't add the code for simplicity reasons. 在您的代码中可能无法完成的一件事是,我看不到您在哪里设置布局,但是出于简单的原因,也许您没有添加代码。 Another thing is that the only excluding buttons would be penB and circleB . 另一件事是,只有排除按钮将penBcircleB

Check my example, see what you're doing wrong and maybe come back with a feedback. 查看我的示例,看看您在做什么错,并可能会反馈。

Sorry, guys. 对不起大家。 Its time to go to the bed. 它该睡觉了。 Im forgot to declare QButtonGroup in .h file, it was declared at the local function, so just memory leak. 我忘了在.h文件中声明QButtonGroup,它是在本地函数中声明的,所以只是内存泄漏。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM