2014-11-06 4 views
1

QPushButton은 스타일 시트를 통해 테두리 이미지로 스타일을 지정했습니다. 그러나 이미지가 앤티 엘리 어싱을 사용하여 그려지지 않기 때문에 이미지 품질이 좋지 않습니다.QPushButton에 대한 앤티 앨리어싱 사용

QPushButton의 하위 클래스를 지정하고 새 페인터를 지정하지 않고도 앤티 엘리 어싱을 활성화 할 수있는 방법이 있습니까? 스타일 시트를 광범위하게 사용하고 있으며 기존의 의사 상태 기능을 에뮬레이트하기 위해 QProperties를 많이 만들어야하기 때문에 실제로 그렇게하고 싶지는 않습니다.

답변

1

일반적으로 setRenderHints 메서드를 사용하여 QPainter 개체에서 Anti-aliasing flag을 설정할 수 있습니다. 이는 일반적으로 위젯을 서브 클래스 화하고 paintEvent를 재정의 (override)함으로써 수행됩니다.

... paintdevice이 위젯되면 QPainter를가 paintEvent() 함수 내부 또는 paintEvent() ...

호출 기능 만 사용할 수 있습니다 Qt의 Docs for QPainter 따르면

서브 클래 싱하지 않으면 Event Filter을 사용하여 paintEvent를 가로 채고 자신을 설정하는 것으로 제한됩니다.

개체의 이벤트 처리기를 재정의하는 클래스를 만들어야합니다. 이 클래스는 QObject::installEventFilter을 사용하여 설치됩니다. 이 클래스는 관심있는 특정 이벤트 (QPaintEvent)를 처리하기 위해 이벤트를 필터링해야합니다. 그런 다음이 qtforum post과 같이 원래 개체 (두 번째 constructor 사용)를 장치로 사용하는 QPainter 개체를 만들어야합니다. 이것은 QWidget이 QPaintDevice를 상속 받기 때문에 가능합니다.

... 
myView::handlePaintEvent(QObject *obj, QEvent *eve) 
{ 
    QPainter painter(static_cast<QWidget *>(obj)); 
} 
... 

여기에서 필요한 렌더링 힌트를 설정할 수 있습니다.

이 동일한 이벤트 필터 클래스는 수많은 객체에 설치할 수 있으므로 다른 위젯을 하위 클래스로 분류하지 않고 동일한 기능을 매우 빠르게 추가 할 수 있습니다.