2014-11-18 11 views
1

QPushButton을 독점 검사로 QButtonGroup에 그룹화하려고 시도하고 있지만, 실행 후에도 여전히 여러 개의 버튼을 확인할 수 있습니다.QButtonGroup setExclusive() issue

// 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); 

나는 그저 몇 가지 이벤트를 처리해야한다고 생각합니다. 그것의 진실한 경우에, 정확하게 어떤 사건? 미리 감사드립니다.

+0

버튼 생성 방법을 보여줄 수 있습니까? 나는 그들에게 공통의 부모가 없다고 의심한다. – tinkertime

+0

또한 소유권이 부모에게 전송되어야하기 때문에 힙에 Qt 객체를 생성하는 것이 가장 좋다. – tinkertime

+0

@ yankee2905, QPushButton penB; QPushButton circleB; 질문에 – Ivan

답변

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

귀하의 코드에서 괜찮지 않을 수있는 한가지는 내가 레이아웃을 설정하는 곳을 보지 못한다는 것입니다.하지만 아마도 si에 대한 코드를 추가하지 않았을 것입니다 매끈한 이유. 또 다른 한가지는 제외 버튼은 penBcircleB입니다.

내 예제를 확인하고 잘못된 작업을보고 피드백을받을 수 있습니다.

-1

죄송합니다. 침대에 갈 시간이야. Im은 QButtonGroup을 .h 파일로 선언하는 것을 잊었습니다. 로컬 함수에서 선언되었으므로 메모리 누수가 발생했습니다.