2013-08-09 7 views
0

그래서 저는 버튼으로 사용하고있는 커스텀 QLabel 클래스를 가지고 있습니다. 레이블을 클릭하면 배경색이 빨간색에서 녹색으로 바뀝니다. 마우스 놓기 이벤트에서 배경은 다시 빨간색으로 바뀝니다. 그러나 위젯의 "클릭 된"신호에 슬롯을 추가하면 마우스 놓기 이벤트가 절대로 발생하지 않는 것처럼 보입니다. 레이블은 녹색으로 유지됩니다. 지금은 레이블이 클릭되면 QMessageBox가 표시됩니다. 그러나 메시지 상자를 닫은 후에도 레이블은 녹색으로 유지됩니다. 나는 focusOutEvent를 배경을 빨간색으로 바꾼 동일한 슬롯에 연결하려고 시도했지만 여전히 작동하지 않습니다. 마우스를 놓은 후 단추를 빨간색 배경으로 되돌리려면 어떻게합니까? 나는 이것이 의미가 있기를 바랍니다. 어떤 아이디어? 사용자가 마우스를 출시 그렇게 할 때 ...어떻게 Qt mouseReleaseEvent가 실행되지 않습니까?

setStyleSheet(sty); 
style()->unpolish(this); 
style()->polish(this); 

답변

0

가 좋아, 문제는 당신이 QMessageBox를 표시하면, QMessageBox 활성 창을 될 것입니다 :

#include "ubtn.h" 
QString sty = "ubtn{background:red;}"; 
QString styd = "ubtn{background:green;}"; 

QWidget *obj; 
ubtn::ubtn(QWidget *parent) : 
    QLabel(parent) 
{ 
    this->setStyleSheet(sty); 
    connect(this, SIGNAL(onBlur(bool)), SLOT(defaultBtn())); 
} 

void ubtn::defaultBtn() 
{ 
    this->setStyleSheet(sty); 
    this->repaint(); 
} 

void ubtn::downBtn() 
{ 
    this->setStyleSheet(styd); 
    this->repaint(); 
} 

void ubtn::mousePressEvent(QMouseEvent *ev) 
{ 
    downBtn(); 
    emit clicked(); 
} 

void ubtn::mouseReleaseEvent(QMouseEvent *ev) 
{ 
    defaultBtn(); 
} 

void ubtn::focusOutEvent(QFocusEvent *e) 
{ 
    QLabel::focusOutEvent(e); 
    emit(onBlur(true)); 
} 
+0

와우, 좋은 생각! 그것은 작동합니다! 왜 내가 그렇게 생각하지 않았는지 모르겠다. 아무튼 감사 해요:) – Nickersoft

0

defaultBtn 기능이 시도 버튼을 클릭하면 mouseReleaseEvent가 ubtn이 아닌 QMessageBox로 이동합니다.

문제를 해결하는 가장 쉬운 방법은 ubtn이 mousePressEvent()가 아니라 mouseReleaseEvent() 메서드에서 "emit clicked()"를 호출하는 것입니다. 그런 식으로 QMessageBox가 표시되기 전에 버튼이 일반 색상으로 되돌릴 수 있으므로 활성 창 변경이 발생합니다.