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));
}
흠, 위젯이 생성 될 때 초기 paintEvent()가 발생합니까? 앱이로드되었거나 메인 창이 표시됩니까? 그렇지 않다면, 나는 이것을 할 다른 방법을 찾아야 할 수도 있습니다. 코드를 테스트 해 주셔서 감사합니다. – Darren
좋아요, 나는 evrything을 다시 확인했는데, 편집 사이에 QTCreator 앱이 파생 된 유형의 위젯 "promotion"을 잃어 버렸기 때문에 이벤트를 얻지 못한 것처럼 보입니다. 당신을 대답으로 표시하려고합니다, 고마워요! – Darren