2013-08-07 7 views
2

내가 무엇을 가지고 : -[Qt] 지원 방법 : 맞춤 위젯의 스타일 시트를 눌렀습니까?

(QFrame 이미 작업 paintEvent의 구현이로 대신는 QWidget의) 내가 QFrame을 확장하는 사용자 정의 위젯을 가지고있다. mousePressed() 및 mouseReleased()를 override하여 pressed() 및 clicked() 신호를 내 보냈습니다. 이 시점까지 모든 것이 예상대로 잘되고 있습니다.

은 내가 필요한 것 : -

이 사용자 정의 위젯은 기본 스타일 시트 지원을 가지고있다 그리고 그것은을 지원합니다 잘 상태를 맴 돕니 다. : 눌린 상태가 작동하지 않습니다. QFrame/QLabel 등에서 지원하지 않는 bcoz라는 것을 이미 알아 냈습니다. : 눌린 상태를 지원하기 위해 무엇을해야하는지 알고 싶습니다. 눌렀다가 놓은 것 또는 다른 어떤 속성/속성을 설정해야합니까?

+0

그냥 빠른 질문입니다. QPushButton, QToolButton 또는 QAbstractButton 대신 QFrame을 기본 클래스로 사용하는 특별한 이유가 있습니까? –

+0

예. 더 많은 위젯을 추가 할 수 있어야하고 QFrame이 잘 지원하는 레이아웃을 설정해야합니다. –

답변

2

QLabel (또는 사용중인 모든 위젯)에 속성을 설정하고 해당 속성의 값을 변경할 수 있습니다. 그런 다음 스타일 시트에서 해당 속성을 사용합니다.

예 :

this->setStyleSheet("*[myproperty=\"true\"] { background-color: red }"); 
d_label = new QLabel("dynamic label", this); 
d_label->setProperty("myproperty", false); 

이 그런 다음 mousePressEvent 당신이 설정하고 mouseReleaseEvent에서 당신 해제 해당 속성 :

d_label->setProperty("myproperty", true); // or false when you wish to unset it 
style()->unpolish(d_label); 
style()->polish(d_label); // force a stylesheet recomputation 
+0

나는 Qt가 : pressed 상태를 나타내는 속성/속성을 가질 것으로 예상했다. 그러나 나는 그렇지 않다고 생각한다. 이것은 Qt가 그것을 추가하기로 결정할 때까지 그 일을합니다. –

+0

당신, 선생님, 방금 날 만들었습니다! –

0

원하는 스타일로 mousePressEvent 및 mouseReleaseEvent에서 "setStyleSheet()"를 수행 할 수 있습니까?

+0

예. 그 순간이 있습니다. 사실, 현재 스타일 시트 문자열을 가져 오는 중 : 문자열의 누른 부분을 압축하여 mousePressed()에서 설정하고 mouseReleased()에서 일반 스타일 시트를 복원합니다. 이 작업을 수행하는 데 필요한 여러 사용자 정의 위젯이 있으므로 적절한 솔루션을 찾고 있습니다. –