2013-09-25 3 views
1

QWidget을 상속 한 사용자 정의 위젯이 있습니다. 자체 paintEvent가 있으며 변경할 수 없습니다. 그래서 대화 상자 객체에서 위젯을 사용하고 싶지만 그래픽을 그려서 그 위에 그래픽을 그릴 필요가 있습니다. 위젯이 비디오 프레임을 그립니다. 그 위에 몇 줄을 그려야합니다. 그 위젯의 paintEvent 이벤트 후에 매번 그릴 수 있습니까? installEventFilter를 사용하고 이벤트 wuth 유형 Qt :: Paint를 잡았습니다. 그러나 익사 한 것을 볼 수는 없습니다. 다른 방법이 있습니까?그리기 후 사용자 정의 위젯 그리기

+0

을하는 데 도움이됩니다. 다음은 예제입니다 : http://qt-project.org/doc/qt-4.8/painting-basicdrawing.html – vahancho

+0

아니요, 아니요, paintEvent 자체 구현을 가지고 있지만, 거기에 구현 된 비디오 프레임을 렌더링하기 때문에 변경할 수 없습니다. , 그리고 그것은 내 코드가 아니에요, 나는 동적 라이브러리로 사용합니다 – mmmaaak

+0

@ mmmaaak : 그것! = 그것의. 나는 이것을 당신의 게시물에 고정 시켰지만, 당신은 코멘트에 계속 글을 씁니다. 차이점을 이해하십시오. 그것을 읽는 것은 귀찮은 일입니다 ... – lpapp

답변

3
  1. 당신은 사용자 정의 위젯 클래스에서 파생 paintEvent 다시 구현하고 드로잉을 먼저 상속 paintEvent를 호출 할 수 있습니다.

  2. 위젯에 이벤트 필터를 설치하고 동일한 작업을 수행 할 수 있습니다. 먼저 위젯의 paintEvent을 호출 한 다음 그림을 그립니다.

  3. 다른 위젯 숨기기 나만의 위젯을 만들고 위젯의 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" 
관련 문제