QWidget을 상속 한 사용자 정의 위젯이 있습니다. 자체 paintEvent가 있으며 변경할 수 없습니다. 그래서 대화 상자 객체에서 위젯을 사용하고 싶지만 그래픽을 그려서 그 위에 그래픽을 그릴 필요가 있습니다. 위젯이 비디오 프레임을 그립니다. 그 위에 몇 줄을 그려야합니다. 그 위젯의 paintEvent 이벤트 후에 매번 그릴 수 있습니까? installEventFilter를 사용하고 이벤트 wuth 유형 Qt :: Paint를 잡았습니다. 그러나 익사 한 것을 볼 수는 없습니다. 다른 방법이 있습니까?그리기 후 사용자 정의 위젯 그리기
1
A
답변
3
당신은 사용자 정의 위젯 클래스에서 파생
paintEvent
다시 구현하고 드로잉을 먼저 상속paintEvent
를 호출 할 수 있습니다.위젯에 이벤트 필터를 설치하고 동일한 작업을 수행 할 수 있습니다. 먼저 위젯의
paintEvent
을 호출 한 다음 그림을 그립니다.다른 위젯 숨기기 나만의 위젯을 만들고 위젯의
paintEvent
에서 다른 위젯의render
메서드를 호출 한 다음 드로잉을 수행하십시오. 다른 위젯은 아마도 시간이 지남에 따라 주기적으로 변경되는 비디오 프레임을 렌더링 할 것이기 때문에 위젯에update()
타이머를 사용해야 할 수도 있습니다.
어느 경우에도 타사 사용자 정의 위젯을 수정하지 않습니다.
다른 위젯을 보호하려면 paintEvent
을 호출하려면 보이지 않는 더미 인 경우에도 QWidget
을 사용해야합니다.
2
이것은 사용자 정의 위젯 내부에 그려주는 아주 간단한 코드 샘플입니다. QPushButton 내부에 파란색 직사각형을 그립니다.
사용 방법은 @Kuba으로 옵션 1에 설명 된 내용을 정확히당신이에 그릴 paintEvent
다시 구현하고, 상속 paintEvent
, 제 1 및 전화 할 위치 그래서, 당신은 사용자 정의 위젯 클래스에서 상속 너의 그림을해라.
희망이 당신은 사용자 정의 위젯 페인트 이벤트를 무시하고이 그릴 수
#include <QApplication>
#include <QPushButton>
#include <QPainter>
#include <QPaintEvent>
// inherit from the class over which you want to draw
class DrawOverButton : public QPushButton
{
Q_OBJECT
public:
DrawOverButton(const QString &text, QWidget *parent = 0) :
QPushButton(text, parent)
{
// enlarge the button so there is some space to draw in
setStyleSheet("QPushButton {min-height: 60px; "
"min-width: 120px; margin: 5px;}");
}
protected:
virtual void paintEvent(QPaintEvent *event) {
// call the base class paint event method
// this will draw the base class content
QPushButton::paintEvent(event);
// draw a blue border inside the button
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(QColor("#3cf"), 4));
const int distance = 20;
painter.drawRoundedRect(QRect(distance, distance,
width() - 2 * distance, height() - 2 * distance),
10, 10);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DrawOverButton *button = new DrawOverButton("Button");
button->show();
return a.exec();
}
#include "main.moc"
관련 문제
- 1. 사용자 정의 UITableViewCell 그리기
- 2. 사용자 정의 JScrollBar 그리기
- 3. 그리기 후 Graphics2D 그리기 처리
- 4. 비트 맵에 위젯 그리기
- 5. wxPython - 투명/알파 배경에 그리기 (사용자 정의 위젯/패널 용)
- 6. Box2D에서 사용자 정의 폴리곤 그리기
- 7. ActionScript로 사용자 정의 Slider 그리기
- 8. 사용자 정의 그리기 TreeNode가있는 TreeView
- 9. UIImageView에 사용자 정의 경로 그리기
- 10. canvas.draw() 사용자 정의 클래스로 그리기
- 11. WPF에서 사용자 정의 모양 그리기
- 12. 사용자 정의 EditText보기 캔버스로보기 그리기
- 13. 사용자 정의 글꼴로 레이블 그리기
- 14. 사용자 정의 도형으로 픽셀 그리기
- 15. 그리기 사용자 정의 글꼴 스프라이트
- 16. ArrayAdapter에 사용자 정의 뷰 그리기
- 17. iOS에서 사용자 정의 그래프 그리기
- 18. 안드로이드가 특정 상황에서 위젯 그리기
- 19. PyQt - 위젯 뒤에 사각형 그리기
- 20. BoxLayout 모서리에 모든 위젯 그리기
- 21. 기존 sdl_opengl 컨텍스트에 위젯 그리기
- 22. MongoDB로 사용자 정의지도 그리기
- 23. JFrame에 사용자 정의 JPanel을 추가 한 후 다시 그리기 메소드
- 24. 런타임에 사용자 정의보기 그리기
- 25. 사용자 정의 버튼에서 폴리곤 그리기 시작
- 26. Android 앱용 사용자 정의 탭 막대 그리기
- 27. C# 사용자 정의 컨트롤 다시 그리기
- 28. CoreGraphics를 사용하여 사용자 정의 UIView 그리기 문제
- 29. Three.js에서 사용자 정의 모양으로 텍스처 그리기
- 30. 다시 그리기/새로 고침 사용자 정의 스킨
을하는 데 도움이됩니다. 다음은 예제입니다 : http://qt-project.org/doc/qt-4.8/painting-basicdrawing.html – vahancho
아니요, 아니요, paintEvent 자체 구현을 가지고 있지만, 거기에 구현 된 비디오 프레임을 렌더링하기 때문에 변경할 수 없습니다. , 그리고 그것은 내 코드가 아니에요, 나는 동적 라이브러리로 사용합니다 – mmmaaak
@ mmmaaak : 그것! = 그것의. 나는 이것을 당신의 게시물에 고정 시켰지만, 당신은 코멘트에 계속 글을 씁니다. 차이점을 이해하십시오. 그것을 읽는 것은 귀찮은 일입니다 ... – lpapp