2009-12-10 4 views
5

표시기 (켜기 또는 끄기) 인 약 40 개의 버튼이 있으며 상태에 따라이 표시기의 색상을 새로 고칩니다. 스타일 시트를 변경하여이 작업을 수행합니다. 이 작업을 수행하는 것은 끝났습니다. 표시기가 상태를 변경했거나 QBrush와 같은 것을 사용해야 할 때만 새로운 스타일 시트를 설정해야합니까?동적 방법으로 스타일 시트를 사용하면 많은 계산이 추가됩니다.

+2

O/S 성능 모니터 (Windows에서'perfmon.exe')를 사용하여 CPU 계산량을 측정 한 적이 있습니까? – ChrisW

답변

1

예. Linux에서 Qt 4.6.2를 사용하면 QLabel의 텍스트 색상을 변경하는 스타일 시트를 설정하는 것이 매우 느립니다.

다이나믹 스타일 시트는 훌륭한 솔루션처럼 보였지만 나를 위해 필요한 setStyle()setStyleSheet()만큼 비쌌습니다!

많은 실험 후, 나는이 두 배 이상 빠르게, 그리고 빠른 일반적으로 50 배 수 있도록이 대안을 발견 : 당신의 (정적) 스타일 시트의 설정에 따라

QPalette palette = lbl->palette(); 
palette.setColor(QPalette::WindowText, Qt::gray); 
lbl->setPalette(palette); 

, 당신 ' d QPalette::WindowTextQPalette::Window 또는 QPalette::Button으로 대체해야합니다. 자세한 내용은 QPalette documentation을 참조하십시오.

+0

멋진 개념입니다. 불행한 점은 명시 적으로 언급 한 것은 "데모 전용"이며 "생산에 사용하지 말아야"합니다 (비록 내가 사용했지만). –

+0

범프. 이전 대답을 무시하지 마십시오 :) –

+0

@yanbellavance, '데모 전용이며'제작시 사용해서는 안되는 링크가 있습니까? –

10

완전한 스타일 시트를 동적으로 설정하지 마십시오. 대신 응용 프로그램 시작시 한 번 구문 분석하는 동적 스타일 시트를 사용하여 응용 프로그램 전체 스타일 시트를 정의하십시오. 우리는 필수 필드가 양식을 제시해야 많은 상황이있다

: 그런 스타일 시트에서 documentation에 설명 된대로 동적 스타일 속성을 정의합니다. 필드가 필수임을 사용자에게 알려주려면 효과적이지만 (모호하게 보이지만) 한 가지 해결책은 해당 필드의 배경색으로 노란색을 사용하는 것입니다. Qt 스타일 시트를 사용하여 구현하기가 매우 쉽습니다. 귀하의 경우에는

*[mandatoryField="true"] { background-color: yellow } 

, 당신은 아마 이런 식으로 뭔가를 할 수 :

QPushButton[state="on"] { 
    background-color: green; 
} 

QPushButton[state="off"] { 
    background-color: red; 
} 

그런 다음 버튼 '상태'속성을 업데이트 첫째, 우리는 다음과 같은 응용 프로그램 전체 스타일 시트를 사용합니다 :

pushButton->setProperty("state", "on"); 
pushButton->setStyle(QApplication::style()); 

불행하게도, Qt는 4.6 당신은 따라서 0123을 위젯의 스타일을 재설정하여 스타일 시트가 재 계산해야합니다전화.

이렇게 동적 스타일 시트를 사용하는 것은 매우 빠릅니다. 동적 스타일 시트 속성을 많이 사용하고 성능 저하를 감지하지 못하는 응용 프로그램을 개발 중입니다.

+0

대단한 답변을 보내 주셔서 감사합니다. 그래서 Qt 4.6에서 pushButton-> setStyle (QApplication :: style());을 호출해야합니다. 스타일에 영향을주기 위해 속성을 변경할 때마다? 나는 미래의 문제를 피하기 위해 그것을 지금 제 코드에 넣을 것입니다. –

+0

Qt 4.6에서 이것이 확실 할 것이라 확신하십니까? –

+0

스타일을 재설정하지 않고도 동적 작동을 유지할 수 없었습니다. 또한이 질문을보십시오 : http : // stackoverflow.com/questions/1595476/are-qts-stylesheets-really-handling-dynamic-properties/1849127 # 1849127 위젯 스타일을 재설정하지 않고도 동적 동작을 얻을 수 있었습니까? 나는 리눅스에서 Qt를 사용하고있다. –

1

내 경험에 따르면 스타일 시트는 너무 많은 리소스를 소비하므로 가능하면 피하는 것이 좋습니다.

+3

너무 많이 무엇입니까? –

+0

새로 고침 빈도는 1 초에 1 초 였고 내 앱이 실행되는 쿼드 코어 PC는 너무 부드럽게 실행되어 0 %로 실행되었습니다. –

관련 문제