Domanda

Ho creato il mio semplice widget derivante da Qwidget e sto cercando di farlo dipingere un gradiente all'interno del suo Paintevent (). Ho impostato un punto di interruzione all'interno di Paintevent, ma non viene mai chiamato, anche quando ridimensivo la finestra ecc. Il widget è un Qwidget promosso dall'interno del designer. Ecco il mio codice oggetto: in realtà non sto ancora leggendo i colori del gradiente, sto solo cercando di far licenziare il pipter () per prima hehe. Innanzitutto, il file di intestazione:

#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

Quindi, il .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));
}
È stato utile?

Soluzione

Non è necessario chiamare update() o repaint() dentro il resizeEvent(). Ma neanche questo dovrebbe rompere nulla. Deve esserci qualcosa di sbagliato nelle cose promosse perché quello paintEvent() Override è corretto. L'ho incollato in una sottoclasse Qwidget da parte mia e funziona. Forse un tutto e una ricostruzione?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top