2012-02-21 3 views
2

QWidget에서 파생 시켜서 내 자신의 간단한 위젯을 만들고 paintEvent() 내부에 그라디언트를 그려 넣으려고합니다. paintEvent 내부에 중단 점을 설정했지만 창 크기를 조정할 때도 절대로 호출되지 않습니다. 위젯은 디자이너 내에서 승격 된 QWidget입니다. 여기 내 객체 코드입니다. 실제로 그라디언트 색상을 읽지 않고, 먼저 hehe를 실행하기 위해 paintEvent()를 얻으려고합니다. 첫째, 헤더 파일 :파생 된 QWidget을 페인트 할 때 문제가 발생했습니다.

#ifndef GRADIENT_H 
#define GRADIENT_H 

#include <QBrush> 
#include <QPen> 
#include <QPixmap> 
#include <QWidget> 


class Gradient : public QWidget 
{ 
    Q_OBJECT 

public: 
    Gradient(QWidget *parent = 0); 

    QSize minimumSizeHint() const; 
    QSize sizeHint() const; 

public slots: 

protected: 
    void paintEvent(QPaintEvent *event); 
    void resizeEvent(QResizeEvent *event); 

private: 

}; 

#endif // GRADIENT_H 

다음, 통화 당은 :

#include <QtGui> 
#include <QPen> 

#include "gradient.h" 


Gradient::Gradient(QWidget *parent) 
    : QWidget(parent) 
{ 

    //setBackgroundRole(QPalette::Base); 
    //setAutoFillBackground(true); 
} 

QSize Gradient::minimumSizeHint() const 
{ 
    return QSize(20, 256); 
} 

QSize Gradient::sizeHint() const 
{ 
    return QSize(20, 512); 
} 

void Gradient::resizeEvent(QResizeEvent * /* event */) 
{ 
    //update(); 
    repaint(); 
} 

void Gradient::paintEvent(QPaintEvent * /* event */) 
{ 
    QPainter painter(this); 
    painter.fillRect(rect(), Qt::black); 
    painter.setPen(QPen(Qt::blue,1)); 
    // painter.setBrush(?); 

    for (int y = 0; y < height(); ++y) 
    { 
     painter.save(); 
     //painter.setPen(); <---here I plan to set different colors from a dynamic table 
     painter.translate(0, y); 

     painter.drawLine(0, 0, width(), 0); 

     painter.restore(); 
    } 
    painter.drawRect(QRect(0, 0, width() - 1, height() - 1)); 
} 

답변

1

resizeEvent() 내부 update() 또는 repaint()를 호출 할 필요가 없다. 그러나 그것도 아무 것도 깨뜨려서는 안됩니다. paintEvent() 무시가 올바르므로 프로모션 된 자료에 잘못된 것이 있어야합니다. 나는 그것을 내 QWidget 서브 클래스에 붙여 넣었고 작동한다. 아마도 깨끗한 모두와 재건?

+0

흠, 위젯이 생성 될 때 초기 paintEvent()가 발생합니까? 앱이로드되었거나 메인 창이 표시됩니까? 그렇지 않다면, 나는 이것을 할 다른 방법을 찾아야 할 수도 있습니다. 코드를 테스트 해 주셔서 감사합니다. – Darren

+0

좋아요, 나는 evrything을 다시 확인했는데, 편집 사이에 QTCreator 앱이 파생 된 유형의 위젯 "promotion"을 잃어 버렸기 때문에 이벤트를 얻지 못한 것처럼 보입니다. 당신을 대답으로 표시하려고합니다, 고마워요! – Darren