Cours:DiyWidgetQT : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Principe)
(Principe)
Ligne 22 : Ligne 22 :
 
</source>
 
</source>
  
Cette méthode ne sera {{Rouge|pas appelée directement}}. On utilisera au besoin [https://doc.qt.io/qt-5/qwidget.html#paintEvent les méthodes {{Rouge|update}} ou {{Rouge|repaint}}] au besoin !
+
Cette méthode ne sera {{Rouge|pas appelée directement}}. On utilisera [https://doc.qt.io/qt-5/qwidget.html#paintEvent les méthodes {{Rouge|update}} ou {{Rouge|repaint}}] au besoin !
  
  

Version du 28 septembre 2025 à 19:50

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 par exemple en faisant une promotion comme vu dans une autre séance

ou ajouter un attribut dans la classe MainWindow puis ajouter cet objet dans l'interface graphique, par ex :

   ...
   // .h
   MonWidget monWidget
   ...

   ...
   // .cpp
   ui->unWidget->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é