2
我通過QWidget派生自己的簡單小部件,並試圖讓它在其paintEvent()中繪製漸變。我在paintEvent中設置了一個斷點,但是它永遠不會被調用,即使當我調整窗口大小時也是如此。這個小部件是設計器內部推廣的QWidget。 這是我的對象代碼 - 我實際上並沒有讀取漸變顏色,只是試圖讓paintEvent()首先啓動hehe。 首先,頭文件:獲取派生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));
}
嗯,做小部件得到一個初始paintEvent(),當他們被創建/應用程序加載/主窗口顯示?如果沒有,我可能需要找到另一種方式來做到這一點。感謝您測試代碼:) – Darren 2012-02-22 00:07:42
好吧,我重新檢查了evrything,而且看起來我從來沒有收到過這些事件,因爲在編輯之間,QTCreator應用程序失去了對我的派生類型的「提升」部件。要將您標記爲答案,謝謝! – Darren 2012-02-22 01:27:51