2010-05-29 2 views
1

내 자신의 4 상태 버튼을 쓰고 있는데 checkStateSet() 메소드에 무엇을 넣을 지 모르겠습니다. 여기 QAbstractButton :: checkStateSet() 메서드의 목적은 무엇입니까?

는 내가 지금까지있어 무엇 :

SyncDirectionButton::SyncDirectionButton(QWidget *parent) : 
QAbstractButton(parent) 
    { 
setCheckable(true); 
setToolTip(tr("Click to change the sync direction")); 
_state = NoSync; 
    } 

    void SyncDirectionButton::paintEvent(QPaintEvent *e) 
    { 
static QPixmapCache::Key noneKey; 
static QPixmapCache::Key bothKey; 
static QPixmapCache::Key leftKey; 
static QPixmapCache::Key rightKey; 

QPainter p(this); 

QPixmap pix; 
if (checkState() == SyncLeft) { 
    if (!QPixmapCache::find(leftKey, &pix)) { 
    pix.load(":/icons/sync-left.png"); 
    leftKey = QPixmapCache::insert(pix); 
    } 
} else if (checkState() == SyncBoth) { 
    if (!QPixmapCache::find(rightKey, &pix)) { 
    pix.load(":/icons/sync-right.png"); 
    rightKey = QPixmapCache::insert(pix); 
    } 
} else if (checkState() == SyncRight) { 
    if (!QPixmapCache::find(bothKey, &pix)) { 
    pix.load(":/icons/sync-both.png"); 
    bothKey = QPixmapCache::insert(pix); 
    } 
} else if (checkState() == NoSync) { 
    if (!QPixmapCache::find(noneKey, &pix)) { 
    pix.load(":/icons/application-exit.png"); 
    noneKey = QPixmapCache::insert(pix); 
    } 
} 
p.drawPixmap(0,0,pix); 
    } 

    SyncDirectionButton::DirectionState SyncDirectionButton::checkState() const 
    { 
return _state; 
    } 

    void SyncDirectionButton::setCheckState(DirectionState state) 
    { 
setChecked(state != NoSync); 
if (state != _state) { 
    _state = state; 
} 
    } 

    QSize SyncDirectionButton::sizeHint() const 
    { 
return QSize(180,90); 
    } 

    void SyncDirectionButton::checkStateSet() 
    { 

    } 

    void SyncDirectionButton::nextCheckState() 
    { 
setCheckState((DirectionState)((checkState()+1)%4)); 
    } 

답변

0

는 첫째, QAbstractButton 1 "되지 않은"상태를 가지고 몇 가지 상태를 "확인"할 수 있습니다.

이 메서드는 확인 상태가 "선택 취소됨"에서 "선택됨"으로 변경 될 때 호출됩니다. 당신은 inital "checked"상태를 설정해야합니다. 그것은 당신의 3 개의 "checked"값 중 첫 번째 상태 여야합니다.

또한 구현 된 nextCheckState()는 3.rd 확인 값에서 호출 될 때 setChecked (false)를 호출하여 "선택 취소"상태로 돌아 가야합니다.

더 나은 QAbstractButton 코드를 참조하십시오. http://www.koders.com/cpp/fid1779E80AD2DA4C93CA22AB575FAA092A9681AE7B.aspx?s=mdef%3Ainsert