위젯이 스타일 시트를 사용하고 있다면 위젯에서 클리핑을 사용할 수 있습니까? painEvent
?Qt에서 클리핑 사용하기
제 질문에 대한 배경과 이유는 위젯이 나타나고 사라질 때 애니메이션으로 만들고 싶습니다. (크기 조정 원이나 사각형과 같은 것이 센터에서 작은 영역으로 시작하면 커집니다.)
이 문제를 해결하는 방법에 대한 저의 첫 번째 생각은 QPainter
의 클리핑을 사용하여 필요한 영역 만 그렸습니다.
위젯의 배경을 투명하게 만들고 기본 도면 기능을 QPainter
에서 사용하면 잘 동작합니다. 하지만 위젯에 스타일 시트가 적용된 경우이를 어떻게 해결할 수 있습니까? 심지어 가능할까요?
- 그것이 내가 언급 한 전략 원하는 것을 얻을 수있다 :
사용 된 Qt는 버전
내 질문은 Qt는 4.8.6인가?
- 어떤 방식으로도 모든 어린이를 클립핑 할 수 있습니까?
- 내 전략이 적절합니까 아니면 그렇게 나쁜 생각입니까?
- 내가 원하는 것을 줄 수있는 다른 아이디어, 모범 사례, Qt 클래스가 있습니까? 나는이 클리핑 것들로 붙어 있기 때문에
추가 정보
나는 보여주기별로 코드가 있습니다. 하지만 여기에 제가 시도한 것에 대한 아이디어를 얻을 수있는 것이 있습니다 :
이것은 작동합니다.
/* Shows a small red circle inside the widget as expected */
void MyAnimatingWidget::paintEvent(QPaintEvent *ev) {
QPainter painter(this);
QRect rect = this->geometry()
QStyleOption opt;
painter.setClipRegion(QRegion(rect.width()/2,
rect.height()/2,
150, 150,
QRegion::Ellipse));
painter.setPen(QColor(255, 0, 0));
painter.setBrush(QColor(255, 0, 0));
painter.setOpacity(1);
painter.drawRect(rect);
}
하지만 아무것도 변경되지 않습니다 다음 : 나는 전혀 style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
줄을 제거하더라도, 스타일 시트도 그려지는 것을,
/* This shows the widget as usual */
void MyAnimatingWidget::paintEvent(QPaintEvent *ev) {
QPainter painter(this);
QRect rect = this->geometry();
QStyleOption opt;
painter.setClipRegion(QRegion(rect.width()/2,
rect.height()/2,
150, 150,
QRegion::Ellipse));
painter.setRenderHint(QPainter::Antialiasing);
painter.setOpacity(1);
opt.init(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
}
이 또한 내가 눈치 챘을.
[애니메이션 프레임 워크] (http://qt-project.org/doc/qt-5/animation-overview.html)를 확인 했습니까? – thuga
QAnimation과 친구들은 애니메이션 자체에 대한 것입니다 (시간이 지남에 따라 가치가 변함). 하지만 내 문제는 애니메이션에없는 드로잉 (현재는)에 있습니다. – exilit
사용중인 Qt의 버전을 알려 주셔야합니다. – user1095108