2014-03-06 1 views
0

저는 Qt 초보자입니다.Qt paintEvent()가 비정상적으로 트리거 됨

그래서 메인 윈도우에는 QSliderQPixmap이 있습니다. 나는 슬롯으로 paintEvent(QPaintEvent* event)

connect(slider, SIGNAL(valueChanged(int)), this, SLOT(centerChange(int))); 

을 재정의 :

void MainWindow::centerChange(int value) 
{ 
    center = value; 
    update(); 
} 

그래서 내가 repainte 픽스맵을 슬라이더의 값이 변경되는 경우에만 싶었다. 그러나 슬라이더에 마우스를 올리거나 마우스를 놓을 때마다 다시 칠해집니다. 왜 이런 일이 일어나는거야?

감사합니다.

답변

2

페인트 이벤트는 기본 Qt 드로잉 시스템에 의해 언제든지 트리거 될 수 있습니다. 페인트 이벤트가 사용자에 의해서만 트리거 될 수 있다고 가정해서는 안됩니다. 앱의 로직을 변경해야합니다.

+0

확인. 하지만 더 나은 성능을 얻기 위해 페인트를 제한하고 싶다면. 필요하지 않습니까? 아니면 사람들이 그렇게하지 않습니까? –

+1

_하지만 repaint를 제한하고 싶다면 Qt 드로잉 시스템은 그리 좋지는 않지만 (물론 이상적인 것은 아닙니다.) 그렇게하지 마십시오. 리눅스에서는 "래스터 (raster)"그래픽 엔진을 사용할 수 있습니다. 네이티브보다 훨씬 빠릅니다. – DmitryARN

+0

확인. 귀하의 답변에 감사드립니다. –

1

문서 says는 :

페인트 이벤트 위젯의 전부 또는 일부를 다시 칠하는 요청입니다. 그것은 다음과 같은 이유로 발생할 수 :

  • 재 페인트() 또는 업데이트() 호출,
  • 위젯이 가려했다 지금은 발견 된
  • , 또는
  • 다른 많은 이유를.

(강조 광산). 특히 기본 OS는 느낄 때마다 다시 그리기 이벤트를 트리거 할 수 있습니다.

0

요구 사항에 따라 paintEvent을 다시 구현하지 마십시오. 슬라이더 값이 변경되면 QPixmap을 업데이트하십시오.

관련 문제