Cours:DiyWidgetQT
Principe
Pour créer votre propre Widget, il convient de spécialiser la classe QWidget :
class MonWidget : public QWidget
{
Q_OBJECT
public:
MonWidget(QWidget *parent = nullptr);
signals:
};
Il suffit ensuite de redéfinir la méthode paintEvent qui est bien entendue déclarée comme virtual dans la classe QWidget !
protected:
void paintEvent(QPaintEvent *event) override;
Cette méthode ne sera pas appelée directement. On utilisera les méthodes update ou repaint au besoin !
On utilisera la classe QPainter pour faire le dessin du widget, ex :
void MonWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPainter painter(this);
QPen pen;
pen.setWidth(4);
pen.setColor(QColor(255,0,0));
painter.setBrush(QColor(0,220,220));
painter.setPen(pen);
painter.drawRect(10,10,width()-20,height()-20);
pen.setWidth(10);
pen.setColor(QColor(0,0,0));
painter.setBrush(QColor(0,200,0));
painter.setPen(pen);
QPointF centre(width()/2,height()/2);
painter.drawEllipse(centre,50,50);
}
On pourra ensuite ajouter un objet de ce type dans l'interface graphique :
- soit en faisant une promotion comme cf sur cette page
- soit en créant un attribut dans la classe MainWindow
- modifier la déclaration de la classe MainWindow :
// .h
...
MonWidget monWidget
...
- dans l'interface graphique :
- ajouter un objet de type QWidget que l'on nommera zoneWidget
- ajouter un QPushButton dans ce zoneWidget
- sélectionner zoneWidget et définir un layout :
- dans la barre d'icone en haut de l'écran
- choisir "mettre en page horizontalement"
- supprimer le QPushButton
- on peut alors ajouter l'objet monWidget dans zoneWidget :
- dans l'interface graphique :
// .cpp
...
ui->zoneWidget->layout()->addWidget(&monWidget);
// ou
setCentralWidget(&monWidget);
Ajout de fonctionnalité
- ajouter 4 boutons sur l'interface graphique
- haut
- bas
- gauche
- droite
- chaque appui sur un bouton permettra de déplacer la balle dans le sens indiqué