How do I properly add a property to a custom control, which when changed triggers the paint event? The property only accepts an integer value of 0, 1 or 2.
The setter of the property would be called setPattern, so an example use would be setPattern(0).
This property value will eventually be used to control the pattern drawn in the paint event.
labelheader.h
#ifndef LABELHEADER_H
#define LABELHEADER_H
#include <QLabel>
class LabelHeader : public QLabel
{
Q_OBJECT
public:
explicit LabelHeader(QWidget *parent = nullptr);
explicit LabelHeader(const QString &text, QWidget *parent = nullptr);
signals:
public slots:
// QWidget interface
protected:
void paintEvent(QPaintEvent *event);
};
#endif // LABELHEADER_H
labelheader.cpp
#include "labelheader.h"
#include <QPainter>
LabelHeader::LabelHeader(QWidget *parent) :
QLabel(parent)
{
}
LabelHeader::LabelHeader(const QString &text, QWidget *parent) :
QLabel(text, parent)
{
}
void LabelHeader::paintEvent(QPaintEvent *event)
{
// calculate font width
QFontMetrics metrics(font());
int text_width = metrics.boundingRect(text()).width();
// calculate dimensions
int y = height() * 0.5;
int x = text_width + 4;
// create pattern
QPixmap px(4, 4);
px.fill(Qt::transparent);
QPainter pattern_painter(&px);
// Create ashed 3 dots
pattern_painter.setPen(Qt::NoPen);
pattern_painter.setBrush(QBrush(palette().color(QPalette::WindowText), Qt::SolidPattern));
pattern_painter.drawRect(0, 0, 1, 1);
pattern_painter.drawRect(2, 2, 1, 1);
// draw
QPainter painter(this);
// Draw dashed 3 dots
painter.drawTiledPixmap(x, y-2, width()-x, 5, px);
// Draw solid line
//painter.drawLine(x,y,width(),y);
QLabel::paintEvent(event);
}