Проблемы с получением производного QWidget для рисования самого себя - PullRequest
2 голосов
/ 21 февраля 2012

Я создал свой собственный простой виджет, производный от QWidget, и пытаюсь заставить его рисовать градиент внутри его paintEvent ().Я установил точку останова внутри paintEvent, но она никогда не вызывается, даже когда я изменяю размер окна и т. Д. Виджет - это продвигаемый QWidget из конструктора.Вот мой объектный код - на самом деле я пока не читаю цвета градиента, просто пытаюсь заставить paintEvent () запустить первый хе-хе.Сначала файл заголовка:

#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 Ответ

1 голос
/ 21 февраля 2012

Нет необходимости звонить update() или repaint() внутри resizeEvent().Но это тоже ничего не должно сломать.Должно быть что-то не так с продвигаемым материалом, потому что корректно paintEvent().Я вставил его в подкласс QWidget на моем конце, и он работает.Возможно, очистить все и восстановить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...