2012-02-21 21 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 

、.cppファイル:

#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

Hmmm、ウィジェットは作成時に最初のpaintEvent()を取得するか、アプリケーションがロードされたかメインウィンドウが表示されますか?そうでない場合、私はこれを行う別の方法を見つける必要があるかもしれません。コードをテストしていただきありがとうございます:) – Darren

+0

OK、私はevrythingを再チェックし、編集の間にQTCreatorアプリケーションが派生型にウィジェット「プロモーション」を失ったため、イベントが発生しないようです。答えとしてあなたをマークするつもりです、ありがとう! – Darren

関連する問題